PLOT
Population size
PLOT_Pop_size<-ggplot2::ggplot(data, aes(x = factor(Generation_Eggs),
y = Nb_adults,
group = Population,
colour = Genetic_Diversity)) +
geom_point(position = position_dodge(0.4), size = 0.8, alpha = 0.7) +
geom_line(position = position_dodge(0.4), size = 0.2, alpha = 0.6) +
ylab("Population size") +
labs(color="Genetic diversity") +
xlab("Generation") +
theme_LO
PLOT_Pop_size

SUM_Popsize <- Rmisc::summarySE(data,
measurevar = c("Nb_adults"),
groupvars = c("Generation_Eggs",
"Genetic_Diversity"),
na.rm=TRUE)
SUM_Popsize
## Generation_Eggs Genetic_Diversity N Nb_adults sd se ci
## 1 1 High 27 100.00000 0.00000 0.000000 0.00000
## 2 1 Medium 23 100.00000 0.00000 0.000000 0.00000
## 3 1 Low 34 100.00000 0.00000 0.000000 0.00000
## 4 2 High 27 344.29630 73.77294 14.197610 29.18360
## 5 2 Medium 23 282.04348 100.75735 21.009360 43.57075
## 6 2 Low 34 282.61765 78.53006 13.467794 27.40043
## 7 3 High 27 151.85185 80.96899 15.582489 32.03027
## 8 3 Medium 23 118.73913 88.54491 18.462891 38.28969
## 9 3 Low 34 104.61765 85.13341 14.600260 29.70445
## 10 4 High 26 114.00000 80.20224 15.728954 32.39439
## 11 4 Medium 23 62.65217 64.50483 13.450188 27.89398
## 12 4 Low 34 46.38235 39.63241 6.796903 13.82840
## 13 5 High 27 103.62963 51.56486 9.923661 20.39838
## 14 5 Medium 21 58.57143 51.11122 11.153383 23.26555
## 15 5 Low 31 51.51613 46.13377 8.285870 16.92200
## 16 6 High 27 147.66667 42.60282 8.198916 16.85311
## 17 6 Medium 19 69.73684 46.02396 10.558620 22.18284
## 18 6 Low 28 77.03571 46.14428 8.720450 17.89289
# SUM_Popsize <- Rmisc::summarySE(data[data$Extinction_finalstatus=="no",],
# measurevar = c("Nb_adults"),
# groupvars = c("Generation_Eggs",
# "Genetic_Diversity"),
# na.rm=TRUE)
# SUM_Popsize
PLOT_Pop_size_average <- PLOT_Pop_size +
geom_point(data = SUM_Popsize, aes(x = factor(Generation_Eggs),
y = Nb_adults,
group = Genetic_Diversity,
colour = Genetic_Diversity),
size = 5, position = position_dodge(0.4)) +
geom_errorbar(data = SUM_Popsize, aes(x = factor(Generation_Eggs),
ymin = Nb_adults-ci, ymax = Nb_adults+ci,
group = Genetic_Diversity,
colour = Genetic_Diversity),
size = 1, width=.2, position = position_dodge(0.4)) +
geom_line(data = SUM_Popsize, aes(x = factor(Generation_Eggs),
y = Nb_adults,
group = Genetic_Diversity,
colour = Genetic_Diversity),
linetype = "dashed", size = 1.5, position = position_dodge(0.4))
PLOT_Pop_size_average

# cowplot::save_plot(file = here::here("figures","PopulationSize_average.pdf"), PLOT_Pop_size_average, base_height = 10/cm(1), base_width = 15/cm(1), dpi = 610)
#Prediction with models
# Test effect
data$gen_square <- data$Generation_Eggs^2
mod1 <- lme4::glmer(Nb_adults~Generation_Eggs*Genetic_Diversity + gen_square*Genetic_Diversity +
Block + (1|obs),
data = data[data$Generation_Eggs>=2&data$Extinction_finalstatus=="no",],
family = "poisson")
dim(data[data$Generation_Eggs>=2&data$Extinction_finalstatus=="no",])
## [1] 355 32
#Predict data
filldata <- data.frame(Genetic_Diversity = rep(levels(data$Genetic_Diversity),100),
Generation_Eggs = rep(seq(2,6, length = 100),each=3),
Block = "Block4",
gen_square = (rep(seq(2,6, length = 100),each=3))^2,
Estimates = NA)
filldata$Estimates <- predict(mod1, newdata=filldata, type = "response", re.form=~0)
#Predcit estimate minimun values
tapply(filldata$Estimates, filldata$Genetic_Diversity, min)
## High Low Medium
## 85.85198 44.16308 51.99642
filldata[filldata$Estimates>=44.16&filldata$Estimates<=44.17,]
## Genetic_Diversity Generation_Eggs Block gen_square Estimates
## 198 Low 4.626263 Block4 21.40231 44.16308
filldata[filldata$Estimates>=51.99&filldata$Estimates<=52.00,]
## Genetic_Diversity Generation_Eggs Block gen_square Estimates
## 230 Medium 5.070707 Block4 25.71207 51.99642
filldata[filldata$Estimates>=85.85&filldata$Estimates<=85.86,]
## Genetic_Diversity Generation_Eggs Block gen_square Estimates
## 181 High 4.424242 Block4 19.57392 85.85198
## Change name vector
vector_names <- c(`Low` = "Strong bottleneck",
`Medium` = "Intermediate bottleneck",
`High` = "Diverse")
PLOT_Pop_size_predict<-ggplot2::ggplot(data[data$Extinction_finalstatus=="no",],
aes(x = factor(Generation_Eggs),
y = Nb_adults)) +
geom_point(aes(group = Population,
colour = Genetic_Diversity),
position = position_dodge(0.4), size = 0.7, alpha = 0.5) +
geom_line(aes(group = Population,
colour = Genetic_Diversity),
position = position_dodge(0.4), size = 0.05, alpha = 0.5) +
geom_line(data = filldata, aes(x = Generation_Eggs,
y = Estimates,
colour = Genetic_Diversity), size = 1.4) +
scale_color_manual(name="Genetic history",
breaks = c("High", "Medium", "Low"),
labels = c("Diverse","Intermediate bottleneck","Strong bottleneck"),
values = c("#00AFBB", "#E7B800", "#FC4E07")) +
ylab("Population size") +
xlab("Generation") +
theme_LO
PLOT_Pop_size_predict

#
# cowplot::save_plot(file = here::here("figures","PopulationSize_predict.pdf"), PLOT_Pop_size_predict, base_height = 10/cm(1), base_width = 15/cm(1), dpi = 610)
#
#
Extinction
#Percent of extinction
length(unique(data$Population[data$Genetic_Diversity=="Low"&
data$Extinction_finalstatus=="yes"]))/
length(unique(data$Population[data$Genetic_Diversity=="Low"]))
## [1] 0.2352941
length(unique(data$Population[data$Genetic_Diversity=="Medium"&
data$Extinction_finalstatus=="yes"]))/
length(unique(data$Population[data$Genetic_Diversity=="Medium"]))
## [1] 0.2173913
length(unique(data$Population[data$Genetic_Diversity=="High"&
data$Extinction_finalstatus=="yes"]))/
length(unique(data$Population[data$Genetic_Diversity=="High"]))
## [1] 0
#Create data with percent
vector_names <- c(`Low` = "Strong bottleneck",
`Medium` = "Intermediate bottleneck",
`High` = "Diverse")
f_labels = data.frame(Genetic_Diversity = c("High","Medium","Low"),
label = c("Extinction = 0 %", "Extinction = 21.7 %", "Extinction = 23.5 %"))
f_labels$Genetic_Diversity <- factor(f_labels$Genetic_Diversity,
levels = c("High", "Medium", "Low"))
## Extinction yes no
PLOT_Extinction<-ggplot2::ggplot(data, aes(x = factor(Generation_Eggs),
y = Nb_adults)) +
facet_wrap(~ Genetic_Diversity, ncol=3, labeller = ggplot2::as_labeller(vector_names)) +
#geom_point(position = position_dodge(0.4), size = 0.4, alpha = 0.7) +
geom_line(aes(group = Population,
colour = Extinction_finalstatus),
position = position_dodge(0.1), size = 0.4, alpha = 0.8) +
geom_text(x = 5, y = 420,
aes(label = label),
data = f_labels,
col="red",
size = 3,
vjust = 0) +
scale_color_manual(values = c("black", "red")) +
ylab("Population size") +
xlab("Generation") +
theme(legend.position = "none") +
theme_LO
PLOT_Extinction

#
#
# cowplot::save_plot(here::here("figures","Extinction.pdf"), PLOT_Extinction, base_height = 8/cm(1),
# base_width = 20/cm(1), dpi = 610)
# #
#
PLOT_Extinction

Growth rate G2
tapply(data[data$Generation_Eggs==2,]$Lambda,data[data$Generation_Eggs==2,]$Genetic_Diversity,mean)
## High Medium Low
## 3.442963 2.820435 2.826176
PLOT_Growth<-ggplot2::ggplot(data[data$Generation_Eggs==2,], aes(x = Genetic_Diversity, y = Lambda,
colour = Genetic_Diversity)) +
geom_boxplot(aes(group = Genetic_Diversity),outlier.colour = NA) +
geom_jitter(width = 0.25, size = 1, alpha = 0.8) +
ylab("Growth rate") +
theme(legend.position = "none") +
xlab("Genetic diversity") +
theme_LO
PLOT_Growth

#
# cowplot::save_plot(here::here("figures","OldPlot_Growth_Start.pdf"), PLOT_Growth, base_height = 10/cm(1),
# base_width = 8/cm(1), dpi = 610)
Life stage
proportion
SUM_Prop_adults<- Rmisc::summarySE(data_phenotyping_all,
measurevar = c("p_adults"),
groupvars = c("Genetic_Diversity","Week"),
na.rm = TRUE)
SUM_Prop_adults
## Genetic_Diversity Week N p_adults sd se ci
## 1 High 4-week 50 0.6508098 0.17776618 0.025139934 0.05052059
## 2 High 5-week 105 0.9632040 0.05259208 0.005132461 0.01017786
## 3 Medium 4-week 24 0.7121270 0.15722597 0.032093616 0.06639070
## 4 Medium 5-week 49 0.9563136 0.06160975 0.008801393 0.01769639
## 5 Low 4-week 30 0.6568606 0.19029917 0.034743716 0.07105888
## 6 Low 5-week 59 0.9582021 0.07845154 0.010213520 0.02044458
SUM_Prop_pupae<- Rmisc::summarySE(data_phenotyping_all,
measurevar = c("p_pupae"),
groupvars = c("Genetic_Diversity","Week"),
na.rm = TRUE)
SUM_Prop_pupae
## Genetic_Diversity Week N p_pupae sd se ci
## 1 High 4-week 50 0.28825555 0.15629878 0.022103985 0.044419621
## 2 High 5-week 105 0.01458769 0.02407445 0.002349426 0.004658999
## 3 Medium 4-week 24 0.23019148 0.14506173 0.029610601 0.061254195
## 4 Medium 5-week 49 0.02283167 0.03485130 0.004978757 0.010010462
## 5 Low 4-week 30 0.29380227 0.17562943 0.032065401 0.065581108
## 6 Low 5-week 59 0.01675308 0.02459640 0.003202178 0.006409856
SUM_Prop_larvae<- Rmisc::summarySE(data_phenotyping_all,
measurevar = c("p_larvae"),
groupvars = c("Genetic_Diversity","Week"),
na.rm = TRUE)
SUM_Prop_larvae
## Genetic_Diversity Week N p_larvae sd se ci
## 1 High 4-week 50 0.06093466 0.04274850 0.006045551 0.012148989
## 2 High 5-week 105 0.02220828 0.04324043 0.004219833 0.008368088
## 3 Medium 4-week 24 0.05768150 0.05999020 0.012245449 0.025331640
## 4 Medium 5-week 49 0.02085474 0.04462923 0.006375605 0.012819012
## 5 Low 4-week 30 0.04933713 0.08198954 0.014969174 0.030615398
## 6 Low 5-week 59 0.02504479 0.06691319 0.008711355 0.017437671
SUM_Prop <- data.frame(SUM_Prop_adults[,1:4],
p_pupae=SUM_Prop_pupae$p_pupae,
p_larvae=SUM_Prop_larvae$p_larvae)
SUM_Prop<-tidyr::gather(SUM_Prop,"Stage", "Proportion",4:6,-"Genetic_Diversity")
SUM_Prop
## Genetic_Diversity Week N Stage Proportion
## 1 High 4-week 50 p_adults 0.65080979
## 2 High 5-week 105 p_adults 0.96320403
## 3 Medium 4-week 24 p_adults 0.71212702
## 4 Medium 5-week 49 p_adults 0.95631359
## 5 Low 4-week 30 p_adults 0.65686059
## 6 Low 5-week 59 p_adults 0.95820213
## 7 High 4-week 50 p_pupae 0.28825555
## 8 High 5-week 105 p_pupae 0.01458769
## 9 Medium 4-week 24 p_pupae 0.23019148
## 10 Medium 5-week 49 p_pupae 0.02283167
## 11 Low 4-week 30 p_pupae 0.29380227
## 12 Low 5-week 59 p_pupae 0.01675308
## 13 High 4-week 50 p_larvae 0.06093466
## 14 High 5-week 105 p_larvae 0.02220828
## 15 Medium 4-week 24 p_larvae 0.05768150
## 16 Medium 5-week 49 p_larvae 0.02085474
## 17 Low 4-week 30 p_larvae 0.04933713
## 18 Low 5-week 59 p_larvae 0.02504479
SUM_Prop$Stage <- factor(SUM_Prop$Stage, levels = c("p_adults", "p_pupae", "p_larvae"))
PLOT_prop <- ggplot2::ggplot(data = SUM_Prop, aes(x = Genetic_Diversity,
y = Proportion, fill = Stage)) +
facet_wrap(~ Week, ncol=2) +
geom_bar(stat="identity") +
xlab("Genetic history") +
labs(color="Stage of individuals") +
ylab("Proportion of each stage") +
scale_fill_manual(values= c("#619CFF","#F8766D","#00BA38"),
breaks = c("p_adults", "p_pupae", "p_larvae"),
labels = c( "Adult", "Pupae","Larvae")) +
ggplot2::scale_x_discrete(breaks=c("High", "Medium", "Low"),
labels=c("Diverse",
"Intermediate\nbottleneck",
"Strong \nbottleneck")) +
theme_LO
PLOT_prop

#
# cowplot::save_plot(here::here("figures","Life_stage_proportion.pdf"), PLOT_prop,
# base_height = 10/cm(1), base_width = 18/cm(1), dpi = 610)
#
Remaining
heterozygosity
# Remove pseudoreplication: average of each population
SUM_POP_He_Mean<- Rmisc::summarySE(data_phenotyping,
measurevar = c("Lambda"),
groupvars = c("Genetic_Diversity",
"He_end",
"Population"),
na.rm=TRUE)
PLOT_He_Final <- ggplot2::ggplot(SUM_POP_He_Mean, aes(x = He_end,
y = Lambda,
colour = Genetic_Diversity,
size = N)) +
geom_point(alpha = 0.8) +
ylab("Growth rate") +
xlab("Expected heterozygosity") +
scale_color_manual(name="Genetic history",
breaks = c("High", "Medium", "Low"),
labels = c("Diverse","Intermediate bottleneck","Strong bottleneck"),
values = c("#00AFBB", "#E7B800", "#FC4E07")) +
labs(size="Replicates") +
theme_LO
PLOT_He_Final

#
#
# cowplot::save_plot(here::here("figures","Heterozygosity_Growthrate.pdf"),
# PLOT_He_Final,
# base_height = 12/cm(1), base_width = 16/cm(1), dpi = 610)
#
#
# # ALL WITHOUT PSEUDO
# SUM_POP_He_ALL<- Rmisc::summarySE(data_evolution_Lambda,
# measurevar = c("Lambda"),
# groupvars = c("Genetic_Diversity","Phenotyping", "He_remain", "He_end",
# "Population"),
# na.rm=TRUE)
#
# SUM_POP_He_ALL$HE <- ifelse(SUM_POP_He_ALL$Phenotyping=="Initial",SUM_POP_He_ALL$He_remain,SUM_POP_He_ALL$He_end)
#
# SUM_POP_He_ALL <- SUM_POP_He_ALL[!is.na(SUM_POP_He_ALL$He_end),]
# SUM_POP_He_ALL <- SUM_POP_He_ALL[SUM_POP_He_ALL$HE!="-Inf",]
#
#
# facet_names <- c('Initial'="Before rescue experiment",'Final'="After rescue experiment")
#
# PLOT_He_ALL <- ggplot2::ggplot(SUM_POP_He_ALL, aes(x = HE, y = Lambda,
# colour = Genetic_Diversity,
# shape = Phenotyping)) +
# #facet_wrap(~ Phenotyping, ncol=1) +
# geom_point(size = 3, alpha = 0.8) +
# scale_shape_manual(values = c(1, 19)) +
# ylab("Growth rate") +
# xlab("Remaining heterozygosity") +
# theme_LO
# PLOT_He_ALL
#
#
# PLOT_He_ALL <- ggplot2::ggplot(SUM_POP_He_ALL, aes(x = HE, y = Lambda,
# colour = Genetic_Diversity,
# shape = Phenotyping)) +
# facet_wrap(~ Phenotyping, ncol=1) +
# geom_point(size = 3, alpha = 0.8) +
# scale_shape_manual(values = c(1, 19)) +
# ylab("Growth rate") +
# xlab("Remaining heterozygosity") +
# theme_LO
# PLOT_He_ALL
#
#
# PLOT_He_ALL <- ggplot2::ggplot(SUM_POP_He_ALL, aes(x = HE, y = Lambda,
# colour = Genetic_Diversity)) +
# facet_wrap(~ Phenotyping, ncol=1) +
# geom_point(size = 3, alpha = 0.8) +
# ylab("Growth rate") +
# xlab("Remaining heterozygosity") +
# theme_LO
# PLOT_He_ALL
He over time
#Compute for all the other genrations, except the first one
data$ID_extinction <- "extant"
for(i in unique(data$Population[data$Extinction_finalstatus=="yes"])){
gen_all <- data$Generation_Eggs[data$Population==i&!is.na(data$He_remain)]
maxgen <- max(gen_all)
data$ID_extinction[data$Population==i&data$Generation_Eggs==maxgen] <- "willextinct"
}
data[data$ID_extinction=="willextinct",]
## Population Block Old_Label Label
## 205 Low16 Block4 B4-O1 7/14 BE B4 | G5 Low 16
## 273 Low27 Block5 B5-B1 6/16 BE B5 | G4 Low 27
## 278 Low28 Block5 B5_E1 5/12 BE B5 | G3 Low 28
## 299 Low30 Block5 B5-D1 6/16 BE B5 | G4 Low 30
## 303 Low31 Block5 B(2)5-P1 6/16 BE B5 | G4 Low 31
## 310 Low32 Block5 B(2)5_Q1 5/12 BE B5 | G3 Low 32
## 317 Low33 Block5 B(2)5-T1 7/21 BE B5 | G5 Low 33
## 336 Low36 Block5 B(2)5-X1 6/16 BE B5 | G4 Low 36
## 402 Med14 Block4 B4-Backup Fam L 6/9 BE B4 | G4 Med 14
## 409 Med17 Block5 B5_Backup_Fam_F 5/12 BE B5 | G3 Med 17
## 437 Med20 Block5 B5 - Backup Fam I 6/16 BE B5 | G4 Med 20
## 449 Med22 Block5 B5_Backup_Fam_B 5/12 BE B5 | G3 Med 22
## 479 Med5 Block3 B3 - Backup Fam E 7/7 BE B3 | G5 Med 5
## Genetic_Diversity Generation_Parents Generation_Eggs Date_Census
## 205 Low 4 5 7/14/21
## 273 Low 3 4 6/16/21
## 278 Low 2 3 5/12/21
## 299 Low 3 4 6/16/21
## 303 Low 3 4 6/16/21
## 310 Low 2 3 5/12/21
## 317 Low 4 5 7/21/21
## 336 Low 3 4 6/16/21
## 402 Medium 3 4 6/9/21
## 409 Medium 2 3 5/12/21
## 437 Medium 3 4 6/16/21
## 449 Medium 2 3 5/12/21
## 479 Medium 4 5 7/7/21
## Date_Start_Eggs Date_End_Eggs Image_Box1 Image_Box2 MC_Box1 MC_Box2
## 205 7/14/21 7/15/21 <NA> DSC_0994 0.000000 2.000000
## 273 6/16/21 6/17/21 DSC_0526 DSC_0527 5.090878 0.000000
## 278 5/12/21 5/13/21 DSC_0918 DSC_0919 3.085768 3.638847
## 299 6/16/21 6/17/21 DSC_0559 <NA> 1.383920 0.000000
## 303 6/16/21 6/17/21 <NA> DSC_0541 0.000000 1.000000
## 310 5/12/21 5/13/21 DSC_0953 DSC_0954 88.254170 70.952124
## 317 7/21/21 7/22/21 DSC_0117 DSC_0118 1.000000 1.000000
## 336 6/16/21 6/17/21 DSC_0540 <NA> 1.000000 0.000000
## 402 6/9/21 6/10/21 DSC_0376 DSC_0377 10.974990 1.000000
## 409 5/12/21 5/13/21 DSC_0916 DSC_0917 1.543122 1.084327
## 437 6/16/21 6/17/21 DSC_0542 <NA> 1.000000 0.000000
## 449 5/12/21 5/13/21 DSC_0922 DSC_0923 9.168447 6.251069
## 479 7/7/21 7/8/21 <NA> DSC_0830 NA NA
## MC_Total_Adults HC_Box1 HC_Box2 HC_Total_Adults Nb_parents Growth_rate
## 205 2.0 0 2 2 5 0.400000000
## 273 5.1 3 0 3 19 0.157894737
## 278 6.7 1 1 2 374 0.005347594
## 299 1.4 1 0 1 146 0.006849315
## 303 1.0 1 1 2 272 0.007352941
## 310 159.2 71 56 127 276 0.460144928
## 317 2.0 1 1 2 3 0.666666667
## 336 1.0 1 0 1 22 0.045454545
## 402 12.0 7 1 8 138 0.057971014
## 409 2.6 3 2 5 416 0.012019231
## 437 1.0 1 0 1 20 0.050000000
## 449 15.4 10 6 16 200 0.080000000
## 479 0.0 NA NA 1 11 0.090909091
## First_Throw Extinction_finalstatus Less_than_5 Nb_adults Lambda obs
## 205 no yes yes 2 0.400000000 378
## 273 no yes yes 3 0.157894737 319
## 278 no yes yes 2 0.005347594 236
## 299 no yes yes 1 0.006849315 322
## 303 no yes yes 2 0.007352941 323
## 310 no yes yes 127 0.460144928 240
## 317 no yes yes 2 0.666666667 409
## 336 no yes yes 1 0.045454545 328
## 402 no yes yes 8 0.057971014 308
## 409 no yes yes 5 0.012019231 245
## 437 no yes yes 1 0.050000000 332
## 449 no yes yes 16 0.080000000 250
## 479 no yes yes 1 0.090909091 359
## He_start He_lost_gen_t He_remain He_exp He_end gen_square
## 205 0.5544299 0.7500000 0.3575672 0.6449276 0.3575672 25
## 273 0.5367998 0.8333333 0.4324691 0.8056432 0.4324691 16
## 278 0.5386585 0.7500000 0.4014365 0.7452523 0.4014365 9
## 299 0.5540444 0.5000000 0.2742819 0.4950540 0.2742819 16
## 303 0.5532775 0.7500000 0.4116634 0.7440450 0.4116634 16
## 310 0.5528880 0.9960630 0.5469651 0.9892872 0.5469651 9
## 317 0.5523333 0.7500000 0.3359893 0.6083089 0.3359893 25
## 336 0.5427371 0.5000000 0.2635269 0.4855518 0.2635269 16
## 402 0.6802331 0.9375000 0.6315974 0.9285014 0.6315974 16
## 409 0.6825509 0.9000000 0.6104897 0.8944237 0.6104897 9
## 437 0.6819650 0.5000000 0.3302071 0.4841994 0.3302071 16
## 449 0.6809168 0.9687500 0.6546991 0.9614965 0.6546991 9
## 479 0.6807065 0.5000000 0.3209456 0.4714889 0.3209456 25
## ID_extinction
## 205 willextinct
## 273 willextinct
## 278 willextinct
## 299 willextinct
## 303 willextinct
## 310 willextinct
## 317 willextinct
## 336 willextinct
## 402 willextinct
## 409 willextinct
## 437 willextinct
## 449 willextinct
## 479 willextinct
dim(data[data$ID_extinction=="willextinct",])
## [1] 13 33
data[data$ID_extinction=="willextinct","Population"]
## [1] Low16 Low27 Low28 Low30 Low31 Low32 Low33 Low36 Med14 Med17 Med20 Med22
## [13] Med5
## 84 Levels: High1 High13 High14 High15 High16 High17 High18 High19 ... Med9
data$Population[data$Genetic_Diversity=="Medium"&data$Extinction_finalstatus=="yes"]
## [1] Med14 Med14 Med14 Med14 Med14 Med14 Med17 Med17 Med17 Med17 Med17 Med17
## [13] Med20 Med20 Med20 Med20 Med20 Med20 Med22 Med22 Med22 Med22 Med22 Med22
## [25] Med5 Med5 Med5 Med5 Med5 Med5
## 84 Levels: High1 High13 High14 High15 High16 High17 High18 High19 ... Med9
PLOT_He_extinction <-ggplot2::ggplot(data, aes(x = factor(Generation_Eggs),
y = He_remain,
group = Population,
colour = Extinction_finalstatus,
shape = ID_extinction)) +
geom_point(position = position_dodge(0.5), size = 3, alpha = 0.6) +
geom_line(position = position_dodge(0.5), size = 0.25, alpha = 0.4) +
ylab("Expected heterozygozity") +
scale_color_manual(values = c("black", "red")) +
scale_shape_manual(values = c(16, 13), guide=FALSE) +
labs(color="Extinct populations") +
xlab("Generation") +
theme_LO
PLOT_He_extinction

#
# cowplot::save_plot(here::here("figures","Heterozygosity_over_time.pdf"),
# PLOT_He_extinction,
# base_height = 12/cm(1), base_width = 14/cm(1), dpi = 610)
Survival vs He
s2 <- survfit(Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity, data = data_survival)
summary(s2)
## Call: survfit(formula = Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity,
## data = data_survival)
##
## Genetic_Diversity=High
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
##
## Genetic_Diversity=Medium
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 4 23 2 0.913 0.0588 0.805 1.000
## 5 21 2 0.826 0.0790 0.685 0.996
## 6 19 1 0.783 0.0860 0.631 0.971
##
## Genetic_Diversity=Low
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 4 34 2 0.941 0.0404 0.865 1.000
## 5 32 4 0.824 0.0654 0.705 0.962
## 6 28 2 0.765 0.0727 0.635 0.921
# Create a summary dataset
SUM_survprob <- data.frame(Genetic_Diversity = rep(levels(data$Genetic_Diversity), each =6),
Generation_Eggs = rep(seq(1:6), n=3),
SurvProb = 1,
se = 0)
SUM_survprob$SurvProb[SUM_survprob$Genetic_Diversity=="Medium"&
SUM_survprob$Generation_Eggs==4]<-summary(s2)$surv[1]
SUM_survprob$SurvProb[SUM_survprob$Genetic_Diversity=="Medium"&
SUM_survprob$Generation_Eggs==5]<-summary(s2)$surv[2]
SUM_survprob$SurvProb[SUM_survprob$Genetic_Diversity=="Medium"&
SUM_survprob$Generation_Eggs==6]<-summary(s2)$surv[3]
SUM_survprob$SurvProb[SUM_survprob$Genetic_Diversity=="Low"&
SUM_survprob$Generation_Eggs==4]<-summary(s2)$surv[4]
SUM_survprob$SurvProb[SUM_survprob$Genetic_Diversity=="Low"&
SUM_survprob$Generation_Eggs==5]<-summary(s2)$surv[5]
SUM_survprob$SurvProb[SUM_survprob$Genetic_Diversity=="Low"&
SUM_survprob$Generation_Eggs==6]<-summary(s2)$surv[6]
SUM_survprob$se[SUM_survprob$Genetic_Diversity=="Medium"&
SUM_survprob$Generation_Eggs==4]<-summary(s2)$std.err[1]
SUM_survprob$se[SUM_survprob$Genetic_Diversity=="Medium"&
SUM_survprob$Generation_Eggs==5]<-summary(s2)$std.err[2]
SUM_survprob$se[SUM_survprob$Genetic_Diversity=="Medium"&
SUM_survprob$Generation_Eggs==6]<-summary(s2)$std.err[3]
SUM_survprob$se[SUM_survprob$Genetic_Diversity=="Low"&
SUM_survprob$Generation_Eggs==4]<-summary(s2)$std.err[4]
SUM_survprob$se[SUM_survprob$Genetic_Diversity=="Low"&
SUM_survprob$Generation_Eggs==5]<-summary(s2)$std.err[5]
SUM_survprob$se[SUM_survprob$Genetic_Diversity=="Low"&
SUM_survprob$Generation_Eggs==6]<-summary(s2)$std.err[6]
data_survprob_he <- merge(x = data, y = SUM_survprob, by = c("Genetic_Diversity", "Generation_Eggs"), all.x=TRUE)
head(data_survprob_he)
## Genetic_Diversity Generation_Eggs Population Block Old_Label
## 1 High 1 High1 Block3 B3_All_Red_Mix
## 2 High 1 High26 Block5 B5_All_Red_Mix
## 3 High 1 High14 Block4 B4_All_Red_Mix
## 4 High 1 High33 Block5 B5_All_Red_Mix
## 5 High 1 High4 Block3 B3_All_Red_Mix
## 6 High 1 High19 Block4 B4_All_Red_Mix
## Label Generation_Parents Date_Census Date_Start_Eggs
## 1 BE B3 2/17 | G1 High1 0 2/17/21 2/17/21
## 2 BE B5 3/3 | G1 High26 0 3/3/21 3/3/21
## 3 BE B4 2/24 | G1 High14 0 2/24/21 2/24/21
## 4 BE B5 3/3 | G1 High33 0 3/3/21 3/3/21
## 5 BE B3 2/17 | G1 High4 0 2/17/21 2/17/21
## 6 BE B4 2/24 | G1 High19 0 2/24/21 2/24/21
## Date_End_Eggs Image_Box1 Image_Box2 MC_Box1 MC_Box2 MC_Total_Adults HC_Box1
## 1 2/18/21 DSC_0155 <NA> NA NA 101.9 NA
## 2 3/4/21 DSC_0675 <NA> NA NA 101.5 NA
## 3 2/25/21 DSC_0416 <NA> NA NA 107.5 NA
## 4 3/4/21 DSC_0682 <NA> NA NA 82.5 NA
## 5 2/18/21 DSC_0158 <NA> NA NA 101.9 NA
## 6 2/25/21 DSC_0422 <NA> NA NA 101.8 NA
## HC_Box2 HC_Total_Adults Nb_parents Growth_rate First_Throw
## 1 NA 100 NA NA no
## 2 NA 100 NA NA no
## 3 NA 100 NA NA no
## 4 NA 100 NA NA no
## 5 NA 100 NA NA no
## 6 NA 100 NA NA no
## Extinction_finalstatus Less_than_5 Nb_adults Lambda obs He_start
## 1 no no 100 NA 1 0.9986008
## 2 no no 100 NA 59 0.9986008
## 3 no no 100 NA 28 0.9986008
## 4 no no 100 NA 63 0.9986008
## 5 no no 100 NA 4 0.9986008
## 6 no no 100 NA 33 0.9986008
## He_lost_gen_t He_remain He_exp He_end gen_square ID_extinction SurvProb
## 1 0.995 0.9936078 0.9679591 0.9666047 1 extant 1
## 2 0.995 0.9936078 0.9220546 0.9207645 1 extant 1
## 3 0.995 0.9936078 0.9766045 0.9752381 1 extant 1
## 4 0.995 0.9936078 0.9358965 0.9345870 1 extant 1
## 5 0.995 0.9936078 0.9812175 0.9798447 1 extant 1
## 6 0.995 0.9936078 0.9804728 0.9791010 1 extant 1
## se
## 1 0
## 2 0
## 3 0
## 4 0
## 5 0
## 6 0
Plot_survival <- ggplot2::ggplot(data_survprob_he, aes(x = He_remain, y = SurvProb , colour = Genetic_Diversity)) +
geom_point(alpha = 0.8) +
ylab("Survival probability") +
xlab("Expected heterozygosity") +
scale_color_manual(name="Genetic history",
breaks = c("High", "Medium", "Low"),
labels = c("Diverse","Intermediate bottleneck","Strong bottleneck"),
values = c("#00AFBB", "#E7B800", "#FC4E07")) +
labs(size="Replicates") +
theme_LO
cowplot::save_plot(here::here("figures","Survival_function_He.pdf"),
Plot_survival,
base_height = 12/cm(1), base_width = 14/cm(1), dpi = 610)
ANALYSIS
Probability of
extinction
############
###### Clean dataset
############
#Prepare clean dataset
data_proba_extinction <- data[data$Generation_Eggs==6,c("Block","Population","Genetic_Diversity","Extinction_finalstatus")]
data_proba_extinction$Extinction_finalstatus <- as.factor(data_proba_extinction$Extinction_finalstatus)
data_proba_extinction$y <- ifelse(data_proba_extinction$Extinction_finalstatus == "yes", 1, 0)
############
###### Analysis
############
#Analysis
mod0 <- glm(y ~ Genetic_Diversity + Block,
data = data_proba_extinction, family = binomial)
summary(mod0)
##
## Call:
## glm(formula = y ~ Genetic_Diversity + Block, family = binomial,
## data = data_proba_extinction)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.26011 -0.44258 -0.30957 -0.00005 2.47474
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -21.3144 1855.7435 -0.011 0.99084
## Genetic_DiversityMedium 18.3002 1855.7433 0.010 0.99213
## Genetic_DiversityLow 18.5062 1855.7432 0.010 0.99204
## BlockBlock4 0.7402 1.2714 0.582 0.56046
## BlockBlock5 3.0006 1.1265 2.664 0.00773 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 72.388 on 83 degrees of freedom
## Residual deviance: 46.833 on 79 degrees of freedom
## AIC: 56.833
##
## Number of Fisher Scoring iterations: 18
#Test genetic diversity effect
mod1 <- glm(y ~ Block ,
data = data_proba_extinction, family = binomial)
anova(mod1, mod0, test = "Chisq")
## Analysis of Deviance Table
##
## Model 1: y ~ Block
## Model 2: y ~ Genetic_Diversity + Block
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 81 58.903
## 2 79 46.833 2 12.069 0.002394 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#We keep genetic diversity
# Perform the lrtest
(A <- logLik(mod1))
## 'log Lik.' -29.45146 (df=3)
(B <- logLik(mod0))
## 'log Lik.' -23.41669 (df=5)
#Since the logLik() function gives more information than the numeric value, use the as.numeric() function to isolate the numeric value
(teststat <- -2 * (as.numeric(A)-as.numeric(B)))
## [1] 12.06954
#df = 5 - 3 = 2
(p.val <- pchisq(teststat, df = 2, lower.tail = FALSE))
## [1] 0.002394043
lmtest::lrtest(mod1, mod0)
## Likelihood ratio test
##
## Model 1: y ~ Block
## Model 2: y ~ Genetic_Diversity + Block
## #Df LogLik Df Chisq Pr(>Chisq)
## 1 3 -29.451
## 2 5 -23.417 2 12.069 0.002394 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod0 <- glm(y ~ Genetic_Diversity-1 + Block ,
data = data_proba_extinction, family = binomial)
summary(mod0)
##
## Call:
## glm(formula = y ~ Genetic_Diversity - 1 + Block, family = binomial,
## data = data_proba_extinction)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.26011 -0.44258 -0.30957 -0.00005 2.47474
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## Genetic_DiversityHigh -21.3144 1855.7435 -0.011 0.99084
## Genetic_DiversityMedium -3.0142 1.1293 -2.669 0.00760 **
## Genetic_DiversityLow -2.8082 1.0659 -2.635 0.00843 **
## BlockBlock4 0.7402 1.2714 0.582 0.56046
## BlockBlock5 3.0006 1.1265 2.664 0.00773 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 116.449 on 84 degrees of freedom
## Residual deviance: 46.833 on 79 degrees of freedom
## AIC: 56.833
##
## Number of Fisher Scoring iterations: 18
############
###### Predicted value
############
#Extract probability of extinction
(p_high <- plogis(-21.3144))
## [1] 5.536989e-10
(p_med <- plogis(-3.0142))
## [1] 0.04678847
(p_low <- plogis(-2.8082))
## [1] 0.05688267
data_predict_extinct <- data.frame(Genetic_Diversity = levels(data_proba_extinction$Genetic_Diversity),
Block = "Block4")
data_predict_extinct$predict <- predict(mod0, type = "response",
re.form = NA,
newdata = data_predict_extinct)
data_predict_extinct
## Genetic_Diversity Block predict
## 1 High Block4 1.160723e-09
## 2 Medium Block4 9.329490e-02
## 3 Low Block4 1.122446e-01
p_high
## [1] 5.536989e-10
p_med
## [1] 0.04678847
p_low
## [1] 0.05688267
############
###### Posthoc
############
emmeans::emmeans(mod0, list(pairwise ~ Genetic_Diversity), adjust = "tukey")
## $`emmeans of Genetic_Diversity`
## Genetic_Diversity emmean SE df asymp.LCL asymp.UCL
## High -20.07 1855.743 Inf -4451.10 4410.961
## Medium -1.77 0.650 Inf -3.32 -0.216
## Low -1.56 0.532 Inf -2.83 -0.290
##
## Results are averaged over the levels of: Block
## Results are given on the logit (not the response) scale.
## Confidence level used: 0.95
## Conf-level adjustment: sidak method for 3 estimates
##
## $`pairwise differences of Genetic_Diversity`
## contrast estimate SE df z.ratio p.value
## High - Medium -18.300 1855.743 Inf -0.010 0.9999
## High - Low -18.506 1855.743 Inf -0.010 0.9999
## Medium - Low -0.206 0.751 Inf -0.274 0.9594
##
## Results are averaged over the levels of: Block
## Results are given on the log odds ratio (not the response) scale.
## P value adjustment: tukey method for comparing a family of 3 estimates
Time to
extinction
data_timeextinction<-data[data$First_Throw=="extinct",]
data_timeextinction <- data_timeextinction[complete.cases(data_timeextinction$Nb_adults), ]
data_timeextinction
## Population Block Old_Label Label
## 207 Low16 Block4 B4-O1 8/18 BE B4 | G6 Low 16
## 274 Low27 Block5 B5-B1 7/21 BE B5 | G5 Low 27
## 277 Low28 Block5 B5-E1 6/16 BE B5 | G4 Low 28
## 296 Low30 Block5 B5-D1 7/21 BE B5 | G5 Low 30
## 301 Low31 Block5 B(2)5-P1 7/21 BE B5 | G5 Low 31
## 309 Low32 Block5 B(2)5-Q1 6/16 BE B5 | G4 Low 32
## 318 Low33 Block5 B(2)5-T1 8/25 BE B5 | G6 Low 33
## 335 Low36 Block5 B(2)5-X1 7/21 BE B5 | G5 Low 36
## 397 Med14 Block4 B4-Backup Fam L 7/14 BE B4 | G5 Med 14
## 410 Med17 Block5 B5 - Backup Fam F 6/16 BE B5 | G4 Med 17
## 438 Med20 Block5 B5 - Backup Fam I 7/21 BE B5 | G5 Med 20
## 448 Med22 Block5 B5-Backup Fam B 6/16 BE B5 | G4 Med 22
## 476 Med5 Block3 B3 - Backup Fam E 8/11 BE B3 | G6 Med 5
## Genetic_Diversity Generation_Parents Generation_Eggs Date_Census
## 207 Low 5 6 8/18/21
## 274 Low 4 5 7/21/21
## 277 Low 3 4 6/16/21
## 296 Low 4 5 7/21/21
## 301 Low 4 5 7/21/21
## 309 Low 3 4 6/16/21
## 318 Low 5 6 8/25/21
## 335 Low 4 5 7/21/21
## 397 Medium 4 5 7/14/21
## 410 Medium 3 4 6/16/21
## 438 Medium 4 5 7/21/21
## 448 Medium 3 4 6/16/21
## 476 Medium 5 6 8/11/21
## Date_Start_Eggs Date_End_Eggs Image_Box1 Image_Box2 MC_Box1 MC_Box2
## 207 8/18/21 8/19/21 <NA> <NA> NA NA
## 274 7/21/21 7/22/21 <NA> <NA> 0 0
## 277 6/16/21 6/17/21 <NA> <NA> 0 0
## 296 7/21/21 7/22/21 <NA> <NA> 0 0
## 301 7/21/21 7/22/21 <NA> <NA> 0 0
## 309 6/16/21 6/17/21 <NA> <NA> 0 0
## 318 8/25/21 8/26/21 <NA> <NA> NA NA
## 335 7/21/21 7/22/21 <NA> <NA> 0 0
## 397 7/14/21 7/15/21 <NA> <NA> 0 0
## 410 6/16/21 6/17/21 <NA> <NA> 0 0
## 438 7/21/21 7/22/21 <NA> <NA> 0 0
## 448 6/16/21 6/17/21 <NA> <NA> 0 0
## 476 8/11/21 8/12/21 <NA> <NA> 0 0
## MC_Total_Adults HC_Box1 HC_Box2 HC_Total_Adults Nb_parents Growth_rate
## 207 0 0 0 0 2 0
## 274 0 0 0 0 3 0
## 277 0 0 0 0 2 0
## 296 0 0 0 0 1 0
## 301 0 0 0 0 2 0
## 309 0 0 0 0 127 0
## 318 0 NA NA 0 2 0
## 335 0 0 0 0 1 0
## 397 0 NA NA 0 8 NA
## 410 0 0 0 0 5 0
## 438 0 0 0 0 1 0
## 448 0 0 0 0 16 0
## 476 0 NA NA 0 1 0
## First_Throw Extinction_finalstatus Less_than_5 Nb_adults Lambda obs
## 207 extinct yes yes 0 0 462
## 274 extinct yes yes 0 0 403
## 277 extinct yes yes 0 0 320
## 296 extinct yes yes 0 0 406
## 301 extinct yes yes 0 0 407
## 309 extinct yes yes 0 0 324
## 318 extinct yes yes 0 0 493
## 335 extinct yes yes 0 0 412
## 397 extinct yes yes 0 0 392
## 410 extinct yes yes 0 0 329
## 438 extinct yes yes 0 0 416
## 448 extinct yes yes 0 0 334
## 476 extinct yes yes 0 0 443
## He_start He_lost_gen_t He_remain He_exp He_end gen_square
## 207 0.5544299 NA NA 0.6449276 0.3575672 36
## 274 0.5367998 NA NA 0.8056432 0.4324691 25
## 277 0.5386585 NA NA 0.7452523 0.4014365 16
## 296 0.5540444 NA NA 0.4950540 0.2742819 25
## 301 0.5532775 NA NA 0.7440450 0.4116634 25
## 309 0.5528880 NA NA 0.9892872 0.5469651 16
## 318 0.5523333 NA NA 0.6083089 0.3359893 36
## 335 0.5427371 NA NA 0.4855518 0.2635269 25
## 397 0.6802331 NA NA 0.9285014 0.6315974 25
## 410 0.6825509 NA NA 0.8944237 0.6104897 16
## 438 0.6819650 NA NA 0.4841994 0.3302071 25
## 448 0.6809168 NA NA 0.9614965 0.6546991 16
## 476 0.6807065 NA NA 0.4714889 0.3209456 36
## ID_extinction
## 207 extant
## 274 extant
## 277 extant
## 296 extant
## 301 extant
## 309 extant
## 318 extant
## 335 extant
## 397 extant
## 410 extant
## 438 extant
## 448 extant
## 476 extant
tapply(data_timeextinction$Generation_Eggs,data_timeextinction$Genetic_Diversity,mean)
## High Medium Low
## NA 4.8 5.0
#Test time of extinction
mod1 <- glm(Generation_Eggs ~ Genetic_Diversity + Block,
data = data_timeextinction, family = "poisson")
mod0 <- glm(Generation_Eggs ~ Block,
data = data_timeextinction, family = "poisson")
anova(mod0, mod1, test = "Chisq")
## Analysis of Deviance Table
##
## Model 1: Generation_Eggs ~ Block
## Model 2: Generation_Eggs ~ Genetic_Diversity + Block
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 10 0.95459
## 2 9 0.74888 1 0.20571 0.6502
#We keep genetic diversity
# Perform the lrtest
(A <- logLik(mod1))
## 'log Lik.' -22.83384 (df=4)
(B <- logLik(mod0))
## 'log Lik.' -22.9367 (df=3)
#Since the logLik() function gives more information than the numeric value, use the as.numeric() function to isolate the numeric value
(teststat <- -2 * (as.numeric(A)-as.numeric(B)))
## [1] -0.2057062
#df = 5 - 3 = 2
(p.val <- pchisq(teststat, df = 2, lower.tail = FALSE))
## [1] 1
lmtest::lrtest(mod0,mod1)
## Likelihood ratio test
##
## Model 1: Generation_Eggs ~ Block
## Model 2: Generation_Eggs ~ Genetic_Diversity + Block
## #Df LogLik Df Chisq Pr(>Chisq)
## 1 3 -22.937
## 2 4 -22.834 1 0.2057 0.6502
Survival
analysis
str(data_survival)
## 'data.frame': 84 obs. of 6 variables:
## $ Population : Factor w/ 84 levels "High1","High13",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ Block : Factor w/ 3 levels "Block3","Block4",..: 1 2 2 2 2 2 2 2 1 2 ...
## $ Genetic_Diversity: Factor w/ 3 levels "High","Medium",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ Gen_eggs_extinct : int 6 6 6 6 6 6 6 6 6 6 ...
## $ Survival : Factor w/ 2 levels "extinct","yes": 2 2 2 2 2 2 2 2 2 2 ...
## $ status : num 0 0 0 0 0 0 0 0 0 0 ...
#Note: the Surv() function in the {survival} package accepts by default TRUE/FALSE, where TRUE is event and FALSE is censored; 1/0 where 1 is event and 0 is censored; or 2/1 where 2 is event and 1 is censored. Please take care to ensure the event indicator is properly formatted.
# The Surv() function from the {survival} package creates a survival object for use as the response in a model formula. There will be one entry for each subject that is the survival time, which is followed by a + if the subject was censored. Let’s look at the first 10 observations:
Surv(data_survival$Gen_eggs_extinct, data_survival$status)
## [1] 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+
## [26] 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 5 4 6+ 6+ 5
## [51] 5 4 6 6+ 6+ 5 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 6+ 5 6+ 4 6+ 6+ 6+ 5 6+ 4
## [76] 6+ 6+ 6+ 6+ 6 6+ 6+ 6+ 6+
#Surv(data_survival_all$Gen_eggs_extinct, data_survival$status)
# The survfit() function creates survival curves using the Kaplan-Meier method based on a formula. Let’s generate the overall survival curve for the entire cohort, assign it to object s1, and look at the structure using str():
s1 <- survfit(Surv(Gen_eggs_extinct, status) ~ 1, data = data_survival)
str(s1)
## List of 16
## $ n : int 84
## $ time : num [1:3] 4 5 6
## $ n.risk : num [1:3] 84 80 74
## $ n.event : num [1:3] 4 6 3
## $ n.censor : num [1:3] 0 0 71
## $ surv : num [1:3] 0.952 0.881 0.845
## $ std.err : num [1:3] 0.0244 0.0401 0.0467
## $ cumhaz : num [1:3] 0.0476 0.1226 0.1632
## $ std.chaz : num [1:3] 0.0238 0.0388 0.0453
## $ type : chr "right"
## $ logse : logi TRUE
## $ conf.int : num 0.95
## $ conf.type: chr "log"
## $ lower : num [1:3] 0.908 0.814 0.771
## $ upper : num [1:3] 0.999 0.953 0.926
## $ call : language survfit(formula = Surv(Gen_eggs_extinct, status) ~ 1, data = data_survival)
## - attr(*, "class")= chr "survfit"
# time: the timepoints at which the curve has a step, i.e. at least one event occurred
# surv: the estimate of survival at the corresponding time
# The {ggsurvfit} package works best if you create the survfit object using the included ggsurvfit::survfit2() function, which uses the same syntax to what we saw previously with survival::survfit(). The ggsurvfit::survfit2() tracks the environment from the function call, which allows the plot to have better default values for labeling and p-value reporting.
#
####
#### PLOT
####
ggsurvfit::survfit2(Surv(Gen_eggs_extinct, status) ~ 1, data = data_survival) %>%
ggsurvfit() +
ggplot2::labs( x = "Generation",
y = "Overall survival probability") +
add_confidence_interval() +
add_risktable()

summary(survfit(Surv(Gen_eggs_extinct, status) ~ 1, data = data_survival))
## Call: survfit(formula = Surv(Gen_eggs_extinct, status) ~ 1, data = data_survival)
##
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 4 84 4 0.952 0.0232 0.908 0.999
## 5 80 6 0.881 0.0353 0.814 0.953
## 6 74 3 0.845 0.0395 0.771 0.926
##### COMPARISONS ACROSS GROUPS
# We can conduct between-group significance tests using a log-rank test. The log-rank test equally weights observations over the entire follow-up time and is the most common way to compare survival times between groups. There are versions that more heavily weight the early or late follow-up that could be more appropriate depending on the research question (see ?survdiff for different test options).
#
# We get the log-rank p-value using the survdiff function. For example, we can test whether there was a difference in survival time according to the demography history in the lung data:
#Comparison
survdiff(Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity, data = data_survival)
## Call:
## survdiff(formula = Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity,
## data = data_survival)
##
## N Observed Expected (O-E)^2/E (O-E)^2/V
## Genetic_Diversity=High 27 0 4.41 4.405 7.00
## Genetic_Diversity=Medium 23 5 3.44 0.707 1.01
## Genetic_Diversity=Low 34 8 5.15 1.571 2.73
##
## Chisq= 7 on 2 degrees of freedom, p= 0.03
summary(survfit(Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity, data = data_survival))
## Call: survfit(formula = Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity,
## data = data_survival)
##
## Genetic_Diversity=High
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
##
## Genetic_Diversity=Medium
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 4 23 2 0.913 0.0588 0.805 1.000
## 5 21 2 0.826 0.0790 0.685 0.996
## 6 19 1 0.783 0.0860 0.631 0.971
##
## Genetic_Diversity=Low
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 4 34 2 0.941 0.0404 0.865 1.000
## 5 32 4 0.824 0.0654 0.705 0.962
## 6 28 2 0.765 0.0727 0.635 0.921
####
#### PLOT
####
plot_survival <- ggsurvfit::survfit2(Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity, data = data_survival) %>%
ggsurvfit(size = 2) +
labs( x = "Generation",
y = "Overall survival probability") +
add_confidence_interval(alpha = 0.1) +
add_censor_mark(size = 8, shape = "x") +
scale_fill_manual(name="Demographic history",
breaks = c("High", "Medium", "Low"),
labels = c("Diverse","Intermediate bottleneck","Strong bottleneck"),
values = c("#00AFBB", "#E7B800", "#FC4E07")) +
scale_color_manual(name="Demographic history",
breaks = c("High", "Medium", "Low"),
labels = c("Diverse","Intermediate bottleneck","Strong bottleneck"),
values = c("#00AFBB", "#E7B800", "#FC4E07")) #+ add_risktable()
plot_survival

cowplot::save_plot(file = here::here("figures","Extinction_Survival_analysis.pdf"),
plot_survival, base_height = 10/cm(1), base_width = 15/cm(1), dpi = 610)
# COX representation
coxph(Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity, data = data_survival)
## Call:
## coxph(formula = Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity,
## data = data_survival)
##
## coef exp(coef) se(coef) z p
## Genetic_DiversityMedium 1.967e+01 3.475e+08 7.239e+03 0.003 0.998
## Genetic_DiversityLow 1.974e+01 3.727e+08 7.239e+03 0.003 0.998
##
## Likelihood ratio test=11.1 on 2 df, p=0.003883
## n= 84, number of events= 13
coxph(Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity, data = data_survival) %>%
gtsummary::tbl_regression(exp = TRUE)
| Characteristic |
HR |
95% CI |
p-value |
| Genetic_Diversity |
|
|
|
| High |
— |
— |
|
| Medium |
347,496,586 |
0.00, Inf |
>0.9 |
| Low |
372,735,433 |
0.00, Inf |
>0.9 |
# The quantity of interest from a Cox regression model is a hazard ratio (HR). The HR represents the ratio of hazards between two groups at any particular point in time. The HR is interpreted as the instantaneous rate of occurrence of the event of interest in those who are still at risk for the event. It is not a risk, though it is commonly mis-interpreted as such. If you have a regression parameter β, then HR = exp(β).
#
# A HR < 1 indicates reduced hazard of death whereas a HR > 1 indicates an increased hazard of death.
#
# So the HR = 0.59 implies that 0.59 times as many females are dying as males, at any given time. Stated differently, females have a significantly lower hazard of death than males in these data.
### OTHER REPRESENTATION :
s2 <- survfit(Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity, data = data_survival)
summary(s2)
## Call: survfit(formula = Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity,
## data = data_survival)
##
## Genetic_Diversity=High
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
##
## Genetic_Diversity=Medium
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 4 23 2 0.913 0.0588 0.805 1.000
## 5 21 2 0.826 0.0790 0.685 0.996
## 6 19 1 0.783 0.0860 0.631 0.971
##
## Genetic_Diversity=Low
## time n.risk n.event survival std.err lower 95% CI upper 95% CI
## 4 34 2 0.941 0.0404 0.865 1.000
## 5 32 4 0.824 0.0654 0.705 0.962
## 6 28 2 0.765 0.0727 0.635 0.921
print(s2)
## Call: survfit(formula = Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity,
## data = data_survival)
##
## n events median 0.95LCL 0.95UCL
## Genetic_Diversity=High 27 0 NA NA NA
## Genetic_Diversity=Medium 23 5 NA NA NA
## Genetic_Diversity=Low 34 8 NA NA NA
# Access to the sort summary table
summary(s2)$table
## records n.max n.start events rmean se(rmean)
## Genetic_Diversity=High 27 27 27 0 6.000000 0.00000000
## Genetic_Diversity=Medium 23 23 23 5 5.739130 0.12627260
## Genetic_Diversity=Low 34 34 34 8 5.764706 0.09355367
## median 0.95LCL 0.95UCL
## Genetic_Diversity=High NA NA NA
## Genetic_Diversity=Medium NA NA NA
## Genetic_Diversity=Low NA NA NA
d <- data.frame(time = s2$time,
n.risk = s2$n.risk,
n.event = s2$n.event,
n.censor = s2$n.censor,
surv = s2$surv,
upper = s2$upper,
lower = s2$lower)
head(d)
## time n.risk n.event n.censor surv upper lower
## 1 6 27 0 27 1.0000000 1.0000000 1.0000000
## 2 4 23 2 0 0.9130435 1.0000000 0.8048548
## 3 5 21 2 0 0.8260870 0.9964666 0.6848395
## 4 6 19 1 18 0.7826087 0.9707088 0.6309579
## 5 4 34 2 0 0.9411765 1.0000000 0.8653187
## 6 5 32 4 0 0.8235294 0.9621763 0.7048611
#library("survminer")
plot2 <- survminer::ggsurvplot(s2,
pval = TRUE, # show p-value of log-rank test.
#pval.coord = c(1,0.2),
pval.size = 5,
conf.int = TRUE, # show confidence intervals for point estimaes of survival curves.
# conf.int.style = "step", # customize style of confidence intervals
conf.int.style = "ribbon", # customize style of confidence intervals
conf.int.alpha = 0.3, # customize style of confidence intervals
censor = TRUE,
censor.shape = "x",
censor.size = 6,
xlab = "Generation", # customize X axis label.
break.time.by = 1, # break X axis in time intervals by 1
ggtheme = theme_light(), # customize plot and risk table with a theme.
#risk.table = TRUE, # Add risk table
#linetype = "strata", # Change line type by groups
risk.table = "abs_pct", # absolute number and percentage at risk.
risk.table.y.text.col = T,# colour risk table text annotations.
risk.table.y.text = FALSE,# show bars instead of names in text annotations in legend of risk table.
risk.table.col = "strata", # Change risk table color by groups
legend.labs = c("Diverse","Intermediate bottleneck","Strong bottleneck"),
legend = c("right"),
legend.title = c("Demographic\nhistory:"),
palette = c("#00AFBB", "#E7B800", "#FC4E07"))
plot2

# cowplot::save_plot(file = here::here("figures","Extinction_Survival_analysis_V2.pdf"),
# plot2, base_height = 10/cm(1), base_width = 15/cm(1), dpi = 610)
# Fit a Cox proportional hazards model
# fit.coxph <- coxph(Surv(Gen_eggs_extinct, status) ~ Genetic_Diversity, data = data_survival)
# ggforest(fit.coxph, data = data_survival)
Population size
G6
############
###### Analysis
############
#Analysis
# mod0 <- lme4::glmer(Nb_adults ~ Genetic_Diversity + Block + (1|Population),
# data = data[data$Generation_Eggs==6,], family = "poisson")
mod0 <- lm(log(Nb_adults) ~ Genetic_Diversity + Block,
data = data[data$Generation_Eggs==6&data$Extinction_finalstatus == "no",])
mod1 <- lm(log(Nb_adults) ~ Block ,
data = data[data$Generation_Eggs==6&data$Extinction_finalstatus == "no",])
anova(mod0, mod1) # Effect of genetic diversity
## Analysis of Variance Table
##
## Model 1: log(Nb_adults) ~ Genetic_Diversity + Block
## Model 2: log(Nb_adults) ~ Block
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 66 29.706
## 2 68 42.118 -2 -12.412 13.789 9.914e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mod0 <- lm(log(Nb_adults) ~ Genetic_Diversity + Block,
data = data[data$Generation_Eggs==6&data$Extinction_finalstatus == "no",])
summary(mod0)
##
## Call:
## lm(formula = log(Nb_adults) ~ Genetic_Diversity + Block, data = data[data$Generation_Eggs ==
## 6 & data$Extinction_finalstatus == "no", ])
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.2417 -0.2947 0.1088 0.4381 1.2624
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.11532 0.17980 28.451 < 2e-16 ***
## Genetic_DiversityMedium -0.94813 0.20540 -4.616 1.86e-05 ***
## Genetic_DiversityLow -0.80532 0.18719 -4.302 5.72e-05 ***
## BlockBlock4 -0.02077 0.18447 -0.113 0.9107
## BlockBlock5 -0.53922 0.21414 -2.518 0.0142 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6709 on 66 degrees of freedom
## Multiple R-squared: 0.3362, Adjusted R-squared: 0.2959
## F-statistic: 8.356 on 4 and 66 DF, p-value: 1.623e-05
############
###### Posthoc
############
emmeans::emmeans(mod0, list(pairwise ~ Genetic_Diversity), adjust = "tukey")
## $`emmeans of Genetic_Diversity`
## Genetic_Diversity emmean SE df lower.CL upper.CL
## High 4.93 0.130 66 4.61 5.25
## Medium 3.98 0.159 66 3.59 4.37
## Low 4.12 0.136 66 3.79 4.46
##
## Results are averaged over the levels of: Block
## Results are given on the log (not the response) scale.
## Confidence level used: 0.95
## Conf-level adjustment: sidak method for 3 estimates
##
## $`pairwise differences of Genetic_Diversity`
## contrast estimate SE df t.ratio p.value
## High - Medium 0.948 0.205 66 4.616 0.0001
## High - Low 0.805 0.187 66 4.302 0.0002
## Medium - Low -0.143 0.207 66 -0.690 0.7704
##
## Results are averaged over the levels of: Block
## Results are given on the log (not the response) scale.
## P value adjustment: tukey method for comparing a family of 3 estimates
Population size over
time
#######################
####################### MODEL INCLUDING GENETIC DIVERSITY WITHOUT GEN 1
#######################
###################### REMOVE GEN 1 ##########################33
#If we dont consider Gen=1
PLOT_Pop_size_average

fit <- lm(log(Nb_adults+1) ~ Generation_Eggs, data = data[data$Generation_Eggs>=2,])
#second degree
fit2 <- lm(log(Nb_adults+1)~stats::poly(Generation_Eggs,2,raw=TRUE), data = data[data$Generation_Eggs>=2,])
#third degree
fit3 <- lm(log(Nb_adults+1)~stats::poly(Generation_Eggs,3,raw=TRUE), data = data[data$Generation_Eggs>=2,])
#fourth degree
fit4 <- lm(log(Nb_adults+1)~stats::poly(Generation_Eggs,4,raw=TRUE), data = data[data$Generation_Eggs>=2,])
#fourth degree
fit5 <- lm(log(Nb_adults+1)~stats::poly(Generation_Eggs,5,raw=TRUE), data = data[data$Generation_Eggs>=2,])
#exp
fit6 <- lm(log(Nb_adults+1)~exp(Generation_Eggs), data = data[data$Generation_Eggs>=2,])
#log
fit7 <- lm(log(Nb_adults+1)~log(Generation_Eggs), data = data[data$Generation_Eggs>=2,])
fit <- glm(Nb_adults ~ Generation_Eggs,
data = data[data$Generation_Eggs>=2,], family = "poisson")
fit2 <- glm(Nb_adults~stats::poly(Generation_Eggs,2,raw=TRUE),
data = data[data$Generation_Eggs>=2,], family = "poisson")
fit3 <- glm(Nb_adults~stats::poly(Generation_Eggs,3,raw=TRUE),
data = data[data$Generation_Eggs>=2,], family = "poisson")
fit4 <- glm(Nb_adults~stats::poly(Generation_Eggs,4,raw=TRUE),
data = data[data$Generation_Eggs>=2,], family = "poisson")
fit5 <- glm(Nb_adults~stats::poly(Generation_Eggs,5,raw=TRUE),
data = data[data$Generation_Eggs>=2,], family = "poisson")
fit6 <- glm(Nb_adults~exp(Generation_Eggs),
data = data[data$Generation_Eggs>=2,], family = "poisson")
fit7 <- glm(Nb_adults~log(Generation_Eggs),
data = data[data$Generation_Eggs>=2,], family = "poisson")
#generate range of 50 numbers starting from 30 and ending at 160
# xx <- seq(1,6, length=100)
# plot(data[data$Generation_Eggs>=2,]$Generation_Eggs,
# log(data[data$Generation_Eggs>=2,]$Nb_adults+1),pch=19,ylim=c(0,8))
# lines(xx, predict(fit, data.frame(Generation_Eggs=xx)), col="red")
# lines(xx, predict(fit2, data.frame(Generation_Eggs=xx)), col="green")
# lines(xx, predict(fit3, data.frame(Generation_Eggs=xx)), col="blue")
# lines(xx, predict(fit4, data.frame(Generation_Eggs=xx)), col="purple")
# lines(xx, predict(fit5, data.frame(Generation_Eggs=xx)), col="yellow")
# lines(xx, predict(fit6, data.frame(Generation_Eggs=xx)), col="orange")
# lines(xx, predict(fit7, data.frame(Generation_Eggs=xx)), col="pink")
xx <- seq(1,6, length=100)
plot(data[data$Generation_Eggs>=2,]$Generation_Eggs,
data[data$Generation_Eggs>=2,]$Nb_adults,pch=19)
lines(xx, predict(fit, data.frame(Generation_Eggs=xx),type = "response"), col="red")
lines(xx, predict(fit2, data.frame(Generation_Eggs=xx),type = "response"), col="green")
lines(xx, predict(fit3, data.frame(Generation_Eggs=xx),type = "response"), col="blue")
lines(xx, predict(fit4, data.frame(Generation_Eggs=xx),type = "response"), col="purple")
lines(xx, predict(fit5, data.frame(Generation_Eggs=xx),type = "response"), col="yellow")
lines(xx, predict(fit6, data.frame(Generation_Eggs=xx),type = "response"), col="orange")
lines(xx, predict(fit7, data.frame(Generation_Eggs=xx),type = "response"), col="pink")

# Check the r squared
rsq::rsq(fit,adj=TRUE)
## [1] 0.4455621
rsq::rsq(fit2,adj=TRUE)
## [1] 0.5943411
rsq::rsq(fit3,adj=TRUE)
## [1] 0.5933609
rsq::rsq(fit4,adj=TRUE)
## [1] 0.5925154
rsq::rsq(fit5,adj=TRUE)
## [1] 0.5925154
rsq::rsq(fit6,adj=TRUE)
## [1] 0.1217528
rsq::rsq(fit7,adj=TRUE)
## [1] 0.5214774
# Best model is fit 2
data$gen_square <- data$Generation_Eggs^2
fit2 <- glm(Nb_adults~stats::poly(Generation_Eggs,2,raw=TRUE),
data = data[data$Generation_Eggs>=2,], family = "poisson")
fit2 <- glm(Nb_adults~Generation_Eggs + gen_square,
data = data[data$Generation_Eggs>=2,], family = "poisson")
# fit2 <- lm(log(Nb_adults+1)~poly(Generation_Eggs,2,raw=TRUE), data = data[data$Generation_Eggs>=2,])
# fit2 <- lm(log(Nb_adults+1)~ Generation_Eggs + gen_square, data = data[data$Generation_Eggs>=2,])
#Add the interaction with Genetic diversity
fit2 <- glm(Nb_adults~ Generation_Eggs*Genetic_Diversity +
gen_square*Genetic_Diversity,
data = data, family = "poisson")
summary(fit2)
##
## Call:
## glm(formula = Nb_adults ~ Generation_Eggs * Genetic_Diversity +
## gen_square * Genetic_Diversity, family = "poisson", data = data)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -15.961 -6.480 -2.677 5.240 21.111
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 5.070332 0.026463 191.604 < 2e-16
## Generation_Eggs 0.156559 0.017811 8.790 < 2e-16
## Genetic_DiversityMedium -0.164531 0.042086 -3.909 9.25e-05
## Genetic_DiversityLow 0.024718 0.037632 0.657 0.511290
## gen_square -0.036751 0.002566 -14.324 < 2e-16
## Generation_Eggs:Genetic_DiversityMedium 0.082702 0.029568 2.797 0.005158
## Generation_Eggs:Genetic_DiversityLow -0.096063 0.026425 -3.635 0.000278
## Genetic_DiversityMedium:gen_square -0.036293 0.004463 -8.132 4.23e-16
## Genetic_DiversityLow:gen_square -0.009935 0.003956 -2.511 0.012038
##
## (Intercept) ***
## Generation_Eggs ***
## Genetic_DiversityMedium ***
## Genetic_DiversityLow
## gen_square ***
## Generation_Eggs:Genetic_DiversityMedium **
## Generation_Eggs:Genetic_DiversityLow ***
## Genetic_DiversityMedium:gen_square ***
## Genetic_DiversityLow:gen_square *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 39428 on 487 degrees of freedom
## Residual deviance: 30864 on 479 degrees of freedom
## (16 observations deleted due to missingness)
## AIC: 33892
##
## Number of Fisher Scoring iterations: 5
####### Add genetic diversity
#Test oversdispersion
mod0 <- glm(Nb_adults~Generation_Eggs*Genetic_Diversity + gen_square*Genetic_Diversity +
Block ,
data = data[data$Generation_Eggs>=2,], family = "poisson")
sqrt(deviance(mod0)/(nobs(mod0)-length(coef(mod0))))
## [1] 6.410767
sigma(mod0)
## [1] 6.410767
# ccl: overdispersion
mod1 <- lme4::glmer(Nb_adults~Generation_Eggs*Genetic_Diversity + gen_square*Genetic_Diversity +
Block + (1|obs),
data = data[data$Generation_Eggs>=2,], family = "poisson")
blmeco::dispersion_glmer(mod1)
## [1] 1.079923
sigma(mod1)
## [1] 1
#Convergence issue
max(abs(with(mod1@optinfo$derivs, solve(Hessian, gradient)))) #should be <0.001
## [1] 0.005558065
# Test effect
mod1 <- lme4::glmer(Nb_adults~Generation_Eggs*Genetic_Diversity + gen_square*Genetic_Diversity +
Block + (1|obs),
data = data[data$Generation_Eggs>=2,], family = "poisson")
mod2 <- lme4::glmer(Nb_adults~Generation_Eggs + gen_square + Genetic_Diversity +
Block + (1|obs),
data = data[data$Generation_Eggs>=2,], family = "poisson")
anova(mod1, mod2, test ="Chisq")
## Data: data[data$Generation_Eggs >= 2, ]
## Models:
## mod2: Nb_adults ~ Generation_Eggs + gen_square + Genetic_Diversity +
## mod2: Block + (1 | obs)
## mod1: Nb_adults ~ Generation_Eggs * Genetic_Diversity + gen_square *
## mod1: Genetic_Diversity + Block + (1 | obs)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod2 8 4684.1 4716.2 -2334.1 4668.1
## mod1 12 4675.7 4723.7 -2325.8 4651.7 16.479 4 0.00244 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Predict data
filldata <- data.frame(Genetic_Diversity = rep(levels(data$Genetic_Diversity),100),
Generation_Eggs = rep(seq(2,6, length = 100),each=3),
Block = "Block4",
gen_square = (rep(seq(2,6, length = 100),each=3))^2,
Estimates = NA)
filldata$Estimates <- predict(mod1, newdata=filldata, type = "response", re.form=~0)
#Plot
PLOT_Pop_size <- ggplot2::ggplot(data = data[data$Generation_Eggs>=2,]) +
geom_line(data = filldata, aes(x = Generation_Eggs,
y = Estimates,
colour = Genetic_Diversity), size = 1.3) +
geom_point(data = data,
aes(x = Generation_Eggs,
y = Nb_adults,
colour = Genetic_Diversity),
position = position_dodge(0.4), size = 1.4, alpha = 0.6) +
ylab("Population size") +
labs(color="Genetic diversity") +
xlab("Generation") +
theme_LO
PLOT_Pop_size

emmeans::emmeans(mod1, list(pairwise ~ Genetic_Diversity), adjust = "tukey")
## $`emmeans of Genetic_Diversity`
## Genetic_Diversity emmean SE df asymp.LCL asymp.UCL
## High 4.88 0.0800 Inf 4.69 5.07
## Medium 4.16 0.0894 Inf 3.95 4.37
## Low 4.04 0.0742 Inf 3.86 4.22
##
## Results are averaged over the levels of: Block
## Results are given on the log (not the response) scale.
## Confidence level used: 0.95
## Conf-level adjustment: sidak method for 3 estimates
##
## $`pairwise differences of Genetic_Diversity`
## contrast estimate SE df z.ratio p.value
## High - Medium 0.717 0.120 Inf 5.973 <.0001
## High - Low 0.838 0.109 Inf 7.710 <.0001
## Medium - Low 0.121 0.116 Inf 1.045 0.5485
##
## Results are averaged over the levels of: Block
## Results are given on the log (not the response) scale.
## P value adjustment: tukey method for comparing a family of 3 estimates
###################################################################
###################################################################
###################################################################
#################### INCLUDING GEN 1 ###########################
PLOT_Pop_size_average

fit <- glm(Nb_adults ~ Generation_Eggs, data = data, family = "poisson")
#second degree
fit2 <- glm(Nb_adults~stats::poly(Generation_Eggs,2,raw=TRUE), data = data, family = "poisson")
#third degree
fit3 <- glm(Nb_adults~stats::poly(Generation_Eggs,3,raw=TRUE), data = data, family = "poisson")
#fourth degree
fit4 <- glm(Nb_adults~stats::poly(Generation_Eggs,4,raw=TRUE), data = data, family = "poisson")
#fourth degree
fit5 <- glm(Nb_adults~stats::poly(Generation_Eggs,5,raw=TRUE), data = data, family = "poisson")
#exp
fit6 <- glm(Nb_adults~exp(Generation_Eggs), data = data, family = "poisson")
#log
fit7 <- glm(Nb_adults~log(Generation_Eggs), data = data, family = "poisson")
#generate range of 50 numbers starting from 30 and ending at 160
xx <- seq(1,6, length=100)
plot(data$Generation_Eggs,
data$Nb_adults,pch=19)
lines(xx, predict(fit, data.frame(Generation_Eggs=xx),type = "response"), col="red")
lines(xx, predict(fit2, data.frame(Generation_Eggs=xx),type = "response"), col="green")
lines(xx, predict(fit3, data.frame(Generation_Eggs=xx),type = "response"), col="blue")
lines(xx, predict(fit4, data.frame(Generation_Eggs=xx),type = "response"), col="purple")
lines(xx, predict(fit5, data.frame(Generation_Eggs=xx),type = "response"), col="yellow")
lines(xx, predict(fit6, data.frame(Generation_Eggs=xx),type = "response"), col="orange")
lines(xx, predict(fit7, data.frame(Generation_Eggs=xx),type = "response"), col="pink")

# Check the r squared
summary(fit)$adj.r.squared
## NULL
summary(fit2)$adj.r.squared
## NULL
summary(fit3)$adj.r.squared
## NULL
summary(fit4)$adj.r.squared # best r square
## NULL
summary(fit5)$adj.r.squared
## NULL
summary(fit6)$adj.r.squared
## NULL
summary(fit7)$adj.r.squared
## NULL
rsq::rsq(fit,adj=TRUE)
## [1] 0.1076945
rsq::rsq(fit2,adj=TRUE)
## [1] 0.1498895
rsq::rsq(fit3,adj=TRUE)
## [1] 0.5256167
rsq::rsq(fit4,adj=TRUE)
## [1] 0.5982229
rsq::rsq(fit5,adj=TRUE)
## [1] 0.5992474
rsq::rsq(fit6,adj=TRUE)
## [1] 0.07238302
rsq::rsq(fit7,adj=TRUE)
## [1] 0.04993927
#
fit4 <- glm(Nb_adults~stats::poly(Generation_Eggs,4,raw=TRUE), data = data, family = "poisson")
#######################
####################### MODEL INCLUDING GENETIC DIVERSITY and GEN 1
#######################
#Test oversdispersion
fit4 <- lme4::glmer(Nb_adults~stats::poly(Generation_Eggs,4,raw=TRUE)*Genetic_Diversity + (1|Block), data = data, family = "poisson")
blmeco::dispersion_glmer(fit4)
## [1] 5.776877
mod <- lme4::glmer(Nb_adults~stats::poly(Generation_Eggs,4,raw=TRUE)*Genetic_Diversity +
(1|Block) + (1|obs), data = data, family = "poisson")
blmeco::dispersion_glmer(mod)
## [1] 1.086207
#Convergence issue
max(abs(with(mod@optinfo$derivs, solve(Hessian, gradient)))) #should be <0.001
## [1] 0.05822911
#Predict data
filldata <- data.frame(Genetic_Diversity = rep(levels(data$Genetic_Diversity),100),
Generation_Eggs = rep(seq(1,6, length = 100),each=3),
Block = "Block4",
Estimates = NA)
filldata$Estimates <- predict(fit4, newdata=filldata, type = "response")
#Plot
PLOT_Pop_size <- ggplot2::ggplot(data = data) +
geom_line(data = filldata, aes(x = Generation_Eggs,
y = Estimates,
colour = Genetic_Diversity), size = 1.3) +
geom_point(data = data,
aes(x = Generation_Eggs,
y = Nb_adults,
colour = Genetic_Diversity),
position = position_dodge(0.4), size = 1.4, alpha = 0.6) +
ylab("Population size") +
labs(color="Genetic diversity") +
xlab("Generation") +
theme_LO
PLOT_Pop_size

# fit2 <- lm(log(Nb_adults+1)~ Generation_Eggs*Genetic_Diversity +
# gen_square*Genetic_Diversity,
# data = data[data$Generation_Eggs>=2,])
# fit2_test <- lm(log(Nb_adults+1)~ Generation_Eggs+Genetic_Diversity +
# gen_square,
# data = data[data$Generation_Eggs>=2,])
mod <- lme4::glmer(Nb_adults~stats::poly(Generation_Eggs,4,raw=TRUE)*Genetic_Diversity +
(1|Block) + (1|obs), data = data, family = "poisson")
mod1 <- lme4::glmer(Nb_adults~stats::poly(Generation_Eggs,4,raw=TRUE)+Genetic_Diversity +
(1|Block) + (1|obs), data = data, family = "poisson")
anova(mod,mod1, test = "Chisq")
## Data: data
## Models:
## mod1: Nb_adults ~ stats::poly(Generation_Eggs, 4, raw = TRUE) + Genetic_Diversity +
## mod1: (1 | Block) + (1 | obs)
## mod: Nb_adults ~ stats::poly(Generation_Eggs, 4, raw = TRUE) * Genetic_Diversity +
## mod: (1 | Block) + (1 | obs)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod1 9 5628.3 5666.1 -2805.2 5610.3
## mod 17 5611.8 5683.0 -2788.9 5577.8 32.578 8 7.336e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Signifcant interaction
summary(mod)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: poisson ( log )
## Formula:
## Nb_adults ~ stats::poly(Generation_Eggs, 4, raw = TRUE) * Genetic_Diversity +
## (1 | Block) + (1 | obs)
## Data: data
##
## AIC BIC logLik deviance df.resid
## 5611.8 5683.0 -2788.9 5577.8 471
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.01761 -0.03977 0.00658 0.05613 0.26106
##
## Random effects:
## Groups Name Variance Std.Dev.
## obs (Intercept) 0.66352 0.8146
## Block (Intercept) 0.07891 0.2809
## Number of obs: 488, groups: obs, 488; Block, 3
##
## Fixed effects:
## Estimate
## (Intercept) -1.993366
## stats::poly(Generation_Eggs, 4, raw = TRUE)1 10.860627
## stats::poly(Generation_Eggs, 4, raw = TRUE)2 -5.148606
## stats::poly(Generation_Eggs, 4, raw = TRUE)3 0.942526
## stats::poly(Generation_Eggs, 4, raw = TRUE)4 -0.059012
## Genetic_DiversityMedium 0.024770
## Genetic_DiversityLow -0.788813
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityMedium 0.061583
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityMedium -0.079133
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityMedium -0.003441
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityMedium 0.001629
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityLow 1.488961
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityLow -0.832919
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityLow 0.138298
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityLow -0.006970
## Std. Error
## (Intercept) 1.252012
## stats::poly(Generation_Eggs, 4, raw = TRUE)1 2.008686
## stats::poly(Generation_Eggs, 4, raw = TRUE)2 1.044443
## stats::poly(Generation_Eggs, 4, raw = TRUE)3 0.215778
## stats::poly(Generation_Eggs, 4, raw = TRUE)4 0.015351
## Genetic_DiversityMedium 1.849227
## Genetic_DiversityLow 1.649489
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityMedium 3.000571
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityMedium 1.565125
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityMedium 0.324403
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityMedium 0.023149
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityLow 2.669129
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityLow 1.389632
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityLow 0.287697
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityLow 0.020517
## z value
## (Intercept) -1.592
## stats::poly(Generation_Eggs, 4, raw = TRUE)1 5.407
## stats::poly(Generation_Eggs, 4, raw = TRUE)2 -4.930
## stats::poly(Generation_Eggs, 4, raw = TRUE)3 4.368
## stats::poly(Generation_Eggs, 4, raw = TRUE)4 -3.844
## Genetic_DiversityMedium 0.013
## Genetic_DiversityLow -0.478
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityMedium 0.021
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityMedium -0.051
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityMedium -0.011
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityMedium 0.070
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityLow 0.558
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityLow -0.599
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityLow 0.481
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityLow -0.340
## Pr(>|z|)
## (Intercept) 0.111355
## stats::poly(Generation_Eggs, 4, raw = TRUE)1 6.41e-08
## stats::poly(Generation_Eggs, 4, raw = TRUE)2 8.24e-07
## stats::poly(Generation_Eggs, 4, raw = TRUE)3 1.25e-05
## stats::poly(Generation_Eggs, 4, raw = TRUE)4 0.000121
## Genetic_DiversityMedium 0.989313
## Genetic_DiversityLow 0.632496
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityMedium 0.983625
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityMedium 0.959676
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityMedium 0.991538
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityMedium 0.943917
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityLow 0.576950
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityLow 0.548919
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityLow 0.630726
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityLow 0.734088
##
## (Intercept)
## stats::poly(Generation_Eggs, 4, raw = TRUE)1 ***
## stats::poly(Generation_Eggs, 4, raw = TRUE)2 ***
## stats::poly(Generation_Eggs, 4, raw = TRUE)3 ***
## stats::poly(Generation_Eggs, 4, raw = TRUE)4 ***
## Genetic_DiversityMedium
## Genetic_DiversityLow
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityMedium
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityMedium
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityMedium
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityMedium
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityLow
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityLow
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityLow
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityLow
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## convergence code: 0
## Model failed to converge with max|grad| = 4.38011 (tol = 0.002, component 1)
## Model is nearly unidentifiable: very large eigenvalue
## - Rescale variables?
## Model is nearly unidentifiable: large eigenvalue ratio
## - Rescale variables?
summary(mod1)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: poisson ( log )
## Formula:
## Nb_adults ~ stats::poly(Generation_Eggs, 4, raw = TRUE) + Genetic_Diversity +
## (1 | Block) + (1 | obs)
## Data: data
##
## AIC BIC logLik deviance df.resid
## 5628.3 5666.1 -2805.2 5610.3 479
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.03098 -0.04847 0.01332 0.06982 0.21353
##
## Random effects:
## Groups Name Variance Std.Dev.
## obs (Intercept) 0.71155 0.8435
## Block (Intercept) 0.07597 0.2756
## Number of obs: 488, groups: obs, 488; Block, 3
##
## Fixed effects:
## Estimate Std. Error z value
## (Intercept) -1.90446 0.82550 -2.307
## stats::poly(Generation_Eggs, 4, raw = TRUE)1 11.54204 1.32511 8.710
## stats::poly(Generation_Eggs, 4, raw = TRUE)2 -5.54378 0.69569 -7.969
## stats::poly(Generation_Eggs, 4, raw = TRUE)3 1.00561 0.14464 6.952
## stats::poly(Generation_Eggs, 4, raw = TRUE)4 -0.06197 0.01033 -5.999
## Genetic_DiversityMedium -0.58397 0.10123 -5.769
## Genetic_DiversityLow -0.67700 0.09165 -7.387
## Pr(>|z|)
## (Intercept) 0.0211 *
## stats::poly(Generation_Eggs, 4, raw = TRUE)1 < 2e-16 ***
## stats::poly(Generation_Eggs, 4, raw = TRUE)2 1.60e-15 ***
## stats::poly(Generation_Eggs, 4, raw = TRUE)3 3.59e-12 ***
## stats::poly(Generation_Eggs, 4, raw = TRUE)4 1.99e-09 ***
## Genetic_DiversityMedium 7.98e-09 ***
## Genetic_DiversityLow 1.50e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) s::(G_E,4,r=TRUE)1 s::(G_E,4,r=TRUE)2
## s::(G_E,4,r=TRUE)1 -0.966
## s::(G_E,4,r=TRUE)2 0.942 -0.992
## s::(G_E,4,r=TRUE)3 -0.915 0.976 -0.995
## s::(G_E,4,r=TRUE)4 0.889 -0.956 0.984
## Gntc_DvrstM -0.060 0.004 -0.005
## Gntc_DvrstL -0.065 0.004 -0.005
## s::(G_E,4,r=TRUE)3 s::(G_E,4,r=TRUE)4 Gnt_DM
## s::(G_E,4,r=TRUE)1
## s::(G_E,4,r=TRUE)2
## s::(G_E,4,r=TRUE)3
## s::(G_E,4,r=TRUE)4 -0.997
## Gntc_DvrstM 0.005 -0.005
## Gntc_DvrstL 0.005 -0.006 0.495
## convergence code: 0
## Model failed to converge with max|grad| = 0.0615683 (tol = 0.002, component 1)
## Model is nearly unidentifiable: very large eigenvalue
## - Rescale variables?
## Model is nearly unidentifiable: large eigenvalue ratio
## - Rescale variables?
emmeans::emmeans(mod, list(pairwise ~ Genetic_Diversity), adjust = "tukey")
## $`emmeans of Genetic_Diversity`
## Genetic_Diversity emmean SE df asymp.LCL asymp.UCL
## High 4.55 0.206 Inf 4.06 5.04
## Medium 3.94 0.217 Inf 3.42 4.46
## Low 3.68 0.201 Inf 3.20 4.16
##
## Results are given on the log (not the response) scale.
## Confidence level used: 0.95
## Conf-level adjustment: sidak method for 3 estimates
##
## $`pairwise differences of Genetic_Diversity`
## contrast estimate SE df z.ratio p.value
## High - Medium 0.609 0.189 Inf 3.221 0.0037
## High - Low 0.866 0.170 Inf 5.078 <.0001
## Medium - Low 0.257 0.186 Inf 1.379 0.3517
##
## Results are given on the log (not the response) scale.
## P value adjustment: tukey method for comparing a family of 3 estimates
#######################
####################### MODEL INCLUDING ONLY RESCUED POPULATIONS
#######################
#Same but only for population not extinct
fit_fin <- glm(Nb_adults~stats::poly(Generation_Eggs,4,raw=TRUE)*Genetic_Diversity,
data = data[data$Extinction_finalstatus=="no",], family = "poisson")
filldata$Estimates_Withoutextpop <- predict(fit_fin, newdata=filldata, type = "response")
PLOT_Pop_size <- ggplot2::ggplot(data = data) +
geom_line(data = filldata, aes(x = Generation_Eggs,
y = Estimates_Withoutextpop,
colour = Genetic_Diversity), size = 1.5, linetype = "longdash") +
geom_point(data = data[data$Extinction_finalstatus=="no",],
aes(x = Generation_Eggs,
y = Nb_adults,
colour = Genetic_Diversity),
position = position_dodge(0.4), size = 1.4, alpha = 0.5) +
ylab("Population size") +
labs(color="Genetic diversity") +
xlab("Generation") +
theme_LO
PLOT_Pop_size

mod <- lme4::glmer(Nb_adults~stats::poly(Generation_Eggs,4,raw=TRUE)*Genetic_Diversity +
(1|Block) + (1|obs),
data = data[data$Extinction_finalstatus=="no",], family = "poisson")
mod1 <- lme4::glmer(Nb_adults~poly(Generation_Eggs,4,raw=TRUE)+Genetic_Diversity +
(1|Block) + (1|obs),
data = data[data$Extinction_finalstatus=="no",], family = "poisson")
anova(mod,mod1, test = "Chisq")
## Data: data[data$Extinction_finalstatus == "no", ]
## Models:
## mod1: Nb_adults ~ poly(Generation_Eggs, 4, raw = TRUE) + Genetic_Diversity +
## mod1: (1 | Block) + (1 | obs)
## mod: Nb_adults ~ stats::poly(Generation_Eggs, 4, raw = TRUE) * Genetic_Diversity +
## mod: (1 | Block) + (1 | obs)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod1 9 4759.9 4796.3 -2370.9 4741.9
## mod 17 4756.3 4825.1 -2361.1 4722.3 19.599 8 0.01196 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mod)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: poisson ( log )
## Formula:
## Nb_adults ~ stats::poly(Generation_Eggs, 4, raw = TRUE) * Genetic_Diversity +
## (1 | Block) + (1 | obs)
## Data: data[data$Extinction_finalstatus == "no", ]
##
## AIC BIC logLik deviance df.resid
## 4756.3 4825.1 -2361.1 4722.3 407
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.57063 -0.04879 0.00393 0.06967 0.29650
##
## Random effects:
## Groups Name Variance Std.Dev.
## obs (Intercept) 0.36624 0.6052
## Block (Intercept) 0.02456 0.1567
## Number of obs: 424, groups: obs, 424; Block, 3
##
## Fixed effects:
## Estimate
## (Intercept) -1.9250178
## stats::poly(Generation_Eggs, 4, raw = TRUE)1 10.7535583
## stats::poly(Generation_Eggs, 4, raw = TRUE)2 -5.0922588
## stats::poly(Generation_Eggs, 4, raw = TRUE)3 0.9316535
## stats::poly(Generation_Eggs, 4, raw = TRUE)4 -0.0583188
## Genetic_DiversityMedium 1.1892488
## Genetic_DiversityLow 0.2794991
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityMedium -2.0341925
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityMedium 1.0112012
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityMedium -0.2039827
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityMedium 0.0137179
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityLow -0.4034287
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityLow 0.0777534
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityLow -0.0101264
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityLow 0.0006044
## Std. Error
## (Intercept) 0.9705855
## stats::poly(Generation_Eggs, 4, raw = TRUE)1 1.5722049
## stats::poly(Generation_Eggs, 4, raw = TRUE)2 0.8204596
## stats::poly(Generation_Eggs, 4, raw = TRUE)3 0.1698215
## stats::poly(Generation_Eggs, 4, raw = TRUE)4 0.0120893
## Genetic_DiversityMedium 1.5049889
## Genetic_DiversityLow 1.3816159
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityMedium 2.4448787
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityMedium 1.2751857
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityMedium 0.2640143
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityMedium 0.0188078
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityLow 2.2495506
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityLow 1.1751948
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityLow 0.2435505
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityLow 0.0173582
## z value
## (Intercept) -1.983
## stats::poly(Generation_Eggs, 4, raw = TRUE)1 6.840
## stats::poly(Generation_Eggs, 4, raw = TRUE)2 -6.207
## stats::poly(Generation_Eggs, 4, raw = TRUE)3 5.486
## stats::poly(Generation_Eggs, 4, raw = TRUE)4 -4.824
## Genetic_DiversityMedium 0.790
## Genetic_DiversityLow 0.202
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityMedium -0.832
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityMedium 0.793
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityMedium -0.773
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityMedium 0.729
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityLow -0.179
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityLow 0.066
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityLow -0.042
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityLow 0.035
## Pr(>|z|)
## (Intercept) 0.0473
## stats::poly(Generation_Eggs, 4, raw = TRUE)1 7.93e-12
## stats::poly(Generation_Eggs, 4, raw = TRUE)2 5.41e-10
## stats::poly(Generation_Eggs, 4, raw = TRUE)3 4.11e-08
## stats::poly(Generation_Eggs, 4, raw = TRUE)4 1.41e-06
## Genetic_DiversityMedium 0.4294
## Genetic_DiversityLow 0.8397
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityMedium 0.4054
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityMedium 0.4278
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityMedium 0.4397
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityMedium 0.4658
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityLow 0.8577
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityLow 0.9472
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityLow 0.9668
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityLow 0.9722
##
## (Intercept) *
## stats::poly(Generation_Eggs, 4, raw = TRUE)1 ***
## stats::poly(Generation_Eggs, 4, raw = TRUE)2 ***
## stats::poly(Generation_Eggs, 4, raw = TRUE)3 ***
## stats::poly(Generation_Eggs, 4, raw = TRUE)4 ***
## Genetic_DiversityMedium
## Genetic_DiversityLow
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityMedium
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityMedium
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityMedium
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityMedium
## stats::poly(Generation_Eggs, 4, raw = TRUE)1:Genetic_DiversityLow
## stats::poly(Generation_Eggs, 4, raw = TRUE)2:Genetic_DiversityLow
## stats::poly(Generation_Eggs, 4, raw = TRUE)3:Genetic_DiversityLow
## stats::poly(Generation_Eggs, 4, raw = TRUE)4:Genetic_DiversityLow
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## convergence code: 0
## Model failed to converge with max|grad| = 3.25364 (tol = 0.002, component 1)
## Model is nearly unidentifiable: very large eigenvalue
## - Rescale variables?
## Model is nearly unidentifiable: large eigenvalue ratio
## - Rescale variables?
emmeans::emmeans(mod, list(pairwise ~ Genetic_Diversity), adjust = "tukey")
## $`emmeans of Genetic_Diversity`
## Genetic_Diversity emmean SE df asymp.LCL asymp.UCL
## High 4.53 0.133 Inf 4.21 4.85
## Medium 4.30 0.151 Inf 3.94 4.66
## Low 4.01 0.137 Inf 3.68 4.33
##
## Results are given on the log (not the response) scale.
## Confidence level used: 0.95
## Conf-level adjustment: sidak method for 3 estimates
##
## $`pairwise differences of Genetic_Diversity`
## contrast estimate SE df z.ratio p.value
## High - Medium 0.230 0.153 Inf 1.507 0.2874
## High - Low 0.523 0.140 Inf 3.746 0.0005
## Medium - Low 0.293 0.157 Inf 1.861 0.1503
##
## Results are given on the log (not the response) scale.
## P value adjustment: tukey method for comparing a family of 3 estimates
#Signifcant interaction
Variance over time
(residuals)
data$gen_square <- data$Generation_Eggs^2
data_G2_all <- data[data$Generation_Eggs>=2&data$Extinction_finalstatus=="no",]
data_G2_all <- data_G2_all[complete.cases(data_G2_all$Nb_adults), ]
Initial_model<- lme4::glmer(Nb_adults~Generation_Eggs*Genetic_Diversity + gen_square*Genetic_Diversity +
Block + (1|obs),
data = data_G2_all,
family = "poisson")
data_G2_all$resid <- resid(Initial_model)
PLOT_Pop_size_predict

#PLOT RESIDUALS
ggplot2::ggplot(data_G2_all, aes(x = factor(Generation_Eggs),
y = resid,
colour = Genetic_Diversity)) +
geom_boxplot(outlier.color = NA) +
geom_point(position = position_dodge(0.75), size = 0.7, alpha = 0.5) +
scale_color_manual(name="Genetic history",
breaks = c("High", "Medium", "Low"),
labels = c("Diverse","Intermediate bottleneck","Strong bottleneck"),
values = c("#00AFBB", "#E7B800", "#FC4E07")) +
ylab("Resid(pop size)") +
xlab("Generation") +
theme_LO

###########
########### OPTION A: Test random effects
###########
# Test variances with residuals and random effects:
model_withrandomeffect <- lme4::glmer(Nb_adults~Generation_Eggs*Genetic_Diversity + gen_square*Genetic_Diversity +
Block + (1|obs) + (1|Genetic_Diversity:Generation_Eggs) ,
data = data_G2_all,
family = "poisson")
model_withoutrandomeffect <- lme4::glmer(Nb_adults~Generation_Eggs*Genetic_Diversity + gen_square*Genetic_Diversity +
Block + (1|obs) ,
data = data_G2_all,
family = "poisson")
anova(model_withrandomeffect,model_withoutrandomeffect, test = "Chisq")
## Data: data_G2_all
## Models:
## model_withoutrandomeffect: Nb_adults ~ Generation_Eggs * Genetic_Diversity + gen_square *
## model_withoutrandomeffect: Genetic_Diversity + Block + (1 | obs)
## model_withrandomeffect: Nb_adults ~ Generation_Eggs * Genetic_Diversity + gen_square *
## model_withrandomeffect: Genetic_Diversity + Block + (1 | obs) + (1 | Genetic_Diversity:Generation_Eggs)
## npar AIC BIC logLik deviance Chisq Df
## model_withoutrandomeffect 12 4007.5 4053.9 -1991.8 3983.5
## model_withrandomeffect 13 4009.5 4059.8 -1991.8 3983.5 3e-04 1
## Pr(>Chisq)
## model_withoutrandomeffect
## model_withrandomeffect 0.9859
AIC(model_withrandomeffect)
## [1] 4009.501
AIC(model_withoutrandomeffect)
## [1] 4007.501
#Best model: without random effects
summary(model_withoutrandomeffect)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: poisson ( log )
## Formula: Nb_adults ~ Generation_Eggs * Genetic_Diversity + gen_square *
## Genetic_Diversity + Block + (1 | obs)
## Data: data_G2_all
##
## AIC BIC logLik deviance df.resid
## 4007.5 4053.9 -1991.8 3983.5 341
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -1.42106 -0.07356 0.01527 0.07992 0.27815
##
## Random effects:
## Groups Name Variance Std.Dev.
## obs (Intercept) 0.4413 0.6643
## Number of obs: 353, groups: obs, 353
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 9.22506 0.51799 17.809 < 2e-16
## Generation_Eggs -2.10047 0.28072 -7.483 7.29e-14
## Genetic_DiversityMedium -0.65107 0.81458 -0.799 0.424
## Genetic_DiversityLow 0.10736 0.73631 0.146 0.884
## gen_square 0.23715 0.03473 6.828 8.59e-12
## BlockBlock4 -0.12145 0.08305 -1.462 0.144
## BlockBlock5 -0.48597 0.09723 -4.998 5.79e-07
## Generation_Eggs:Genetic_DiversityMedium 0.32468 0.44435 0.731 0.465
## Generation_Eggs:Genetic_DiversityLow -0.24262 0.40166 -0.604 0.546
## Genetic_DiversityMedium:gen_square -0.06201 0.05501 -1.127 0.260
## Genetic_DiversityLow:gen_square 0.01594 0.04970 0.321 0.748
##
## (Intercept) ***
## Generation_Eggs ***
## Genetic_DiversityMedium
## Genetic_DiversityLow
## gen_square ***
## BlockBlock4
## BlockBlock5 ***
## Generation_Eggs:Genetic_DiversityMedium
## Generation_Eggs:Genetic_DiversityLow
## Genetic_DiversityMedium:gen_square
## Genetic_DiversityLow:gen_square
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Gnrt_E Gnt_DM Gnt_DL gn_sqr BlckB4 BlckB5 G_E:G_DM G_E:G_DL
## Genrtn_Eggs -0.972
## Gntc_DvrstM -0.629 0.618
## Gntc_DvrstL -0.696 0.683 0.442
## gen_square 0.936 -0.989 -0.595 -0.658
## BlockBlock4 -0.097 0.000 0.011 0.007 0.000
## BlockBlock5 -0.099 0.012 0.013 0.023 -0.012 0.466
## Gnrt_E:G_DM 0.614 -0.632 -0.978 -0.432 0.625 0.001 -0.007
## Gnrt_E:G_DL 0.679 -0.699 -0.432 -0.978 0.691 0.004 -0.003 0.441
## Gntc_DvrM:_ -0.591 0.625 0.942 0.416 -0.631 -0.001 0.007 -0.989 -0.436
## Gntc_DvrL:_ -0.654 0.691 0.416 0.942 -0.699 -0.004 0.004 -0.437 -0.989
## G_DM:_
## Genrtn_Eggs
## Gntc_DvrstM
## Gntc_DvrstL
## gen_square
## BlockBlock4
## BlockBlock5
## Gnrt_E:G_DM
## Gnrt_E:G_DL
## Gntc_DvrM:_
## Gntc_DvrL:_ 0.441
## convergence code: 0
## Model failed to converge with max|grad| = 0.0430026 (tol = 0.002, component 1)
#Note: should be the same as:
model_lm_withrandomeffects <- lme4::lmer(resid ~ (1|Genetic_Diversity:Generation_Eggs), data = data_G2_all)
lmerTest::rand(model_lm_withrandomeffects)
## ANOVA-like table for random-effects: Single term deletions
##
## Model:
## resid ~ (1 | Genetic_Diversity:Generation_Eggs)
## npar logLik AIC LRT Df
## <none> 3 -67.275 140.55
## (1 | Genetic_Diversity:Generation_Eggs) 2 -67.275 138.55 -1.4211e-13 1
## Pr(>Chisq)
## <none>
## (1 | Genetic_Diversity:Generation_Eggs) 1
###########
########### OPTION B: Test with Levene's test on residuals
###########
# Test variances with Levene's test
tapply(data_G2_all$resid, list(data_G2_all$Generation_Eggs, data_G2_all$Genetic_Diversity),var)
## High Medium Low
## 2 0.017018250 0.009672648 0.002808944
## 3 0.056168990 0.027477499 0.090848301
## 4 0.096321758 0.171608049 0.178076659
## 5 0.042211123 0.164030698 0.183835255
## 6 0.007039084 0.171966465 0.117733007
# Levene’s test on the varianc
# Using leveneTest()
car::leveneTest(resid ~ interaction(Generation_Eggs, Genetic_Diversity), data = data_G2_all)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 14 2.4148 0.003093 **
## 338
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# PairedData::levene.var.test(data_G2_all$dat[df$Genetic_Diversity=="A"], data_G2_all$dat[df$Genetic_Diversity=="B"])
#
# library("PairedData")
#
# leveneTest(data_G2_all$resid[data_G2_all$Genetic_Diversity=="High"&
# data_G2_all$Generation_Eggs==2],
# data_G2_all$resid[data_G2_all$Genetic_Diversity=="Low"&
# data_G2_all$Generation_Eggs==2])
#
#
# ?levene.var.test()
#
#
# ?median()
# ?leveneTest()
#
###########
########### OPTION C: Check heteroscedasticity of residuals
###########
#Breusch-Pagan test
#library(lmtest)
#lmtest::bptest(Initial_model)
#p-value is not significant (i.e., >0.05), we do not reject the null hypothesis. Therefore, we assume that the residuals are homoscedastic
#library(skedastic)
#install.packages("skedastic")
#skedastic::white_lm(Initial_model)
###########
########### OPTION D: Test with Levene's test on data
###########
# Test variances with Levene's test
tapply(data_G2_all$resid, list(data_G2_all$Generation_Eggs, data_G2_all$Genetic_Diversity),var)
## High Medium Low
## 2 0.017018250 0.009672648 0.002808944
## 3 0.056168990 0.027477499 0.090848301
## 4 0.096321758 0.171608049 0.178076659
## 5 0.042211123 0.164030698 0.183835255
## 6 0.007039084 0.171966465 0.117733007
# Levene’s test on the varianc
# Using leveneTest()
car::leveneTest(resid ~ interaction(Generation_Eggs, Genetic_Diversity), data = data_G2_all)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 14 2.4148 0.003093 **
## 338
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Variance over time
(raw data)
ggplot2::ggplot(data[data$Extinction_finalstatus=="no",],
aes(x = factor(Generation_Eggs),
y = Nb_adults,
colour = Genetic_Diversity)) +
geom_boxplot(outlier.color = NA) +
geom_point(position = position_dodge(0.75), size = 0.7, alpha = 0.5) +
scale_color_manual(name="Genetic history",
breaks = c("High", "Medium", "Low"),
labels = c("Diverse","Intermediate bottleneck","Strong bottleneck"),
values = c("#00AFBB", "#E7B800", "#FC4E07")) +
ylab("Population size") +
xlab("Generation") +
geom_text(x=4, y=450, label="**", size = 5, color = "Black") +
theme_LO

###########
########### OPTION D: Test with Levene's test on data
###########
# Test variances with Levene's test
tapply(data[data$Extinction_finalstatus=="no",]$Nb_adults,
list(data[data$Extinction_finalstatus=="no",]$Generation_Eggs,
data[data$Extinction_finalstatus=="no",]$Genetic_Diversity),var, na.rm=TRUE)
## High Medium Low
## 1 0.000 0.000 0.000
## 2 5442.447 8472.330 5546.986
## 3 6555.977 7844.408 6712.525
## 4 6432.400 4085.585 1243.594
## 5 2658.934 2375.036 1858.627
## 6 1815.000 1940.840 1788.358
# Levene’s test on the varianc
# Using leveneTest()
car::leveneTest(Nb_adults ~ interaction(Generation_Eggs, Genetic_Diversity),
data = data[data$Extinction_finalstatus=="no",])
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 17 9.4055 < 2.2e-16 ***
## 406
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
car::leveneTest(Nb_adults ~ interaction(Generation_Eggs, Genetic_Diversity),
data = data[data$Extinction_finalstatus=="no"&data$Generation_Eggs==5,])
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 0.4647 0.6303
## 67
car::leveneTest(Nb_adults ~ interaction(Generation_Eggs, Genetic_Diversity),
data = data[data$Extinction_finalstatus=="no"&data$Generation_Eggs==4,])
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 4.9423 0.009952 **
## 67
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
car::leveneTest(Nb_adults ~ interaction(Generation_Eggs, Genetic_Diversity),
data = data[data$Extinction_finalstatus=="no"&data$Generation_Eggs==6,])
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 0.3492 0.7065
## 68
car::leveneTest(Nb_adults ~ interaction(Generation_Eggs, Genetic_Diversity),
data = data[data$Extinction_finalstatus=="no"&data$Generation_Eggs==3,])
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 0.5668 0.57
## 68
car::leveneTest(Nb_adults ~ interaction(Generation_Eggs, Genetic_Diversity),
data = data[data$Extinction_finalstatus=="no"&data$Generation_Eggs==2,])
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 2.0367 0.1383
## 68
car::leveneTest(Nb_adults ~ interaction(Generation_Eggs, Genetic_Diversity),
data = data[data$Extinction_finalstatus=="no"&data$Generation_Eggs==4&data$Genetic_Diversity!="Medium",])
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 10.689 0.001954 **
## 50
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Growth rate G6
head(data_phenotyping)
## Population Week Block ID_Rep Divsersity Population.1 Box Initial.N Start
## 1 High1 5-week Block3 52 High 1 1 30 7/8/21
## 2 High1 5-week Block3 53 High 1 2 30 7/8/21
## 3 High13 5-week Block4 129 High 13 1 30 7/15/21
## 4 High13 5-week Block4 130 High 13 2 30 7/15/21
## 5 High13 5-week Block4 131 High 13 3 30 7/15/21
## 6 High14 5-week Block4 132 High 14 1 30 7/15/21
## End Larvae Pupae Adults Lambda Genetic_Diversity Nb_ttx p_adults
## 1 8/12/21 3 9 97 3.2333333 High 109 0.8899083
## 2 8/12/21 1 1 8 0.2666667 High 10 0.8000000
## 3 8/19/21 2 0 84 2.8000000 High 86 0.9767442
## 4 8/19/21 1 2 104 3.4666667 High 107 0.9719626
## 5 8/19/21 2 1 84 2.8000000 High 87 0.9655172
## 6 8/19/21 1 0 83 2.7666667 High 84 0.9880952
## p_pupae p_larvae He_remain He_start He_exp He_end
## 1 0.08256881 0.027522936 0.9986008 0.9986008 0.9679591 0.9666047
## 2 0.10000000 0.100000000 0.9986008 0.9986008 0.9679591 0.9666047
## 3 0.00000000 0.023255814 0.9986008 0.9986008 0.9786327 0.9772634
## 4 0.01869159 0.009345794 0.9986008 0.9986008 0.9786327 0.9772634
## 5 0.01149425 0.022988506 0.9986008 0.9986008 0.9786327 0.9772634
## 6 0.00000000 0.011904762 0.9986008 0.9986008 0.9766045 0.9752381
#Without considering extinct populations
#tapply(data_phenotyping$Lambda,data_phenotyping$Population,length)
#############################################################
################## Determine distribution ###################
#############################################################
## Poisson lognormal model
mlog <- lme4::lmer(log(Lambda+1) ~ Genetic_Diversity + Block + (1|Population),
data=data_phenotyping)
#summary(mlog)
# Square root
msqrt <- lme4::lmer(sqrt(Lambda) ~ Genetic_Diversity + Block + (1|Population),
data=data_phenotyping)
#summary(msqrt)
# Normal
mnorm <- lme4::lmer(Lambda ~ Genetic_Diversity + Block + (1|Population),
data=data_phenotyping)
## Compare AIC
AIC(mlog, msqrt,mnorm)
## df AIC
## mlog 7 120.8153
## msqrt 7 156.0901
## mnorm 7 528.8983
#Square root a better fits to the data
#But we compare different values: Growth rate and Growth rate+1
# ## Simulate data
x.teo.log <- unlist(simulate(mlog))
x.teo.sqrt <- unlist(simulate(msqrt))
x.teo.norm <- unlist(simulate(mnorm))
# ## QQplot to compared Negative binomial and Poisson log normal distributions
qqplot(data_phenotyping$Lambda, x.teo.log,
main="QQ-plot", xlab="Observed data", ylab="Simulated data",
las=1, xlim = c(0, 10), ylim = c(0, 10), col='blue') ## QQ-plot
points(sort(data_phenotyping$Lambda), sort(x.teo.sqrt), pch=1, col='red')
points(sort(data_phenotyping$Lambda), sort(x.teo.norm), pch=1, col='green')
abline(0,1)
# ## Add legend
legend(0, 7, legend=c("Log", "Sqrt", "Normal"),
col=c("blue", "red", "green"),
pch=1, bty="n")

# ## Normal distribution provides a good fit to the data
# QQ plot
# qqnorm(resid(mlog))
# qqline(resid(mlog))
# qqnorm(resid(msqrt))
# qqline(resid(msqrt))
# qqnorm(resid(mnorm))
# qqline(resid(mnorm)) #best fit
#Distribution Residuals
hist(residuals(mlog),col="yellow",freq=F)

hist(residuals(msqrt),col="yellow",freq=F) #Seems the better fit

hist(residuals(mnorm),col="yellow",freq=F) #Seems the better fit

#Test normality
g1 <- fitdistrplus::gofstat(fitdistrplus::fitdist(residuals(mnorm), "norm"))
g1$kstest
## 1-mle-norm
## "not rejected"
g1 <- fitdistrplus::gofstat(fitdistrplus::fitdist(residuals(msqrt), "norm"))
g1$kstest
## 1-mle-norm
## "not rejected"
g1 <- fitdistrplus::gofstat(fitdistrplus::fitdist(residuals(mnorm), "norm"))
g1$kstest
## 1-mle-norm
## "not rejected"
## Compare AIC
AIC(mlog, msqrt, mnorm)
## df AIC
## mlog 7 120.8153
## msqrt 7 156.0901
## mnorm 7 528.8983
#SLog a better fits to the data
#############################################################
################## Analysis ###################
#############################################################
mod0 <- lme4::lmer(Lambda ~ Genetic_Diversity + Block + (1|Population),
data=data_phenotyping)
summary(mod0)
## Linear mixed model fit by REML ['lmerMod']
## Formula: Lambda ~ Genetic_Diversity + Block + (1 | Population)
## Data: data_phenotyping
##
## REML criterion at convergence: 514.9
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3747 -0.6242 -0.0778 0.5409 3.4451
##
## Random effects:
## Groups Name Variance Std.Dev.
## Population (Intercept) 0.2321 0.4817
## Residual 0.7480 0.8649
## Number of obs: 186, groups: Population, 57
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 2.569709 0.193717 13.265
## Genetic_DiversityMedium -0.873366 0.238587 -3.661
## Genetic_DiversityLow -0.700898 0.222333 -3.152
## BlockBlock4 0.220484 0.214487 1.028
## BlockBlock5 -0.003695 0.249586 -0.015
##
## Correlation of Fixed Effects:
## (Intr) Gnt_DM Gnt_DL BlckB4
## Gntc_DvrstM -0.460
## Gntc_DvrstL -0.587 0.363
## BlockBlock4 -0.636 0.079 0.175
## BlockBlock5 -0.592 0.089 0.232 0.451
mod1 <- lme4::lmer(Lambda ~ Block + (1|Population),
data=data_phenotyping)
anova(mod0,mod1,test="Chisq") # difference
## Data: data_phenotyping
## Models:
## mod1: Lambda ~ Block + (1 | Population)
## mod0: Lambda ~ Genetic_Diversity + Block + (1 | Population)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod1 5 532.53 548.66 -261.26 522.53
## mod0 7 520.90 543.48 -253.45 506.90 15.635 2 0.0004027 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
############
###### Posthoc
############
emmeans::emmeans(mod0, list(pairwise ~ Genetic_Diversity), adjust = "tukey")
## $`emmeans of Genetic_Diversity`
## Genetic_Diversity emmean SE df lower.CL upper.CL
## High 2.64 0.135 42.2 2.31 2.98
## Medium 1.77 0.198 51.5 1.28 2.26
## Low 1.94 0.177 58.2 1.51 2.38
##
## Results are averaged over the levels of: Block
## Degrees-of-freedom method: kenward-roger
## Confidence level used: 0.95
## Conf-level adjustment: sidak method for 3 estimates
##
## $`pairwise differences of Genetic_Diversity`
## contrast estimate SE df t.ratio p.value
## High - Medium 0.873 0.239 48.0 3.653 0.0018
## High - Low 0.701 0.223 52.5 3.143 0.0076
## Medium - Low -0.172 0.261 53.0 -0.660 0.7873
##
## Results are averaged over the levels of: Block
## Degrees-of-freedom method: kenward-roger
## P value adjustment: tukey method for comparing a family of 3 estimates
############
###### Predict
############
data_predict_extinct <- data.frame(Genetic_Diversity = levels(data_phenotyping$Genetic_Diversity),
Block = "Block4")
data_predict_extinct$predict <- predict(mod0,
type = "response",
re.form = NA,
newdata = data_predict_extinct)
Remaining He
difference
Rmisc::summarySE(data[data$Generation_Eggs==2,],
measurevar = c("He_remain"),
groupvars = c("Genetic_Diversity"),
na.rm=TRUE)
## Genetic_Diversity N He_remain sd se ci
## 1 High 27 0.9918493 0.001771315 0.0003408897 0.0007007089
## 2 Medium 23 0.6743040 0.006431259 0.0013410101 0.0027810847
## 3 Low 34 0.5404225 0.012690807 0.0021764555 0.0044280320
mfull <- lm(He_remain ~ Genetic_Diversity, data=data[data$Generation_Eggs==2,])
mless <- lm(He_remain ~ 1, data=data[data$Generation_Eggs==2,])
anova(mfull,mless) #Keep effect
## Analysis of Variance Table
##
## Model 1: He_remain ~ Genetic_Diversity
## Model 2: He_remain ~ 1
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 81 0.00631
## 2 83 3.14572 -2 -3.1394 20162 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
############
###### Posthoc
############
emmeans::emmeans(mfull, list(pairwise ~ Genetic_Diversity), adjust = "tukey")
## $`emmeans of Genetic_Diversity`
## Genetic_Diversity emmean SE df lower.CL upper.CL
## High 0.9918 0.001698 81 0.9877 0.9960
## Medium 0.6743 0.001840 81 0.6698 0.6788
## Low 0.5404 0.001513 81 0.5367 0.5441
##
## Confidence level used: 0.95
## Conf-level adjustment: sidak method for 3 estimates
##
## $`pairwise differences of Genetic_Diversity`
## contrast estimate SE df t.ratio p.value
## High - Medium 0.318 0.00250 81 126.829 <.0001
## High - Low 0.451 0.00227 81 198.470 <.0001
## Medium - Low 0.134 0.00238 81 56.200 <.0001
##
## P value adjustment: tukey method for comparing a family of 3 estimates
Rmisc::summarySE(data[data$Generation_Eggs==2,],
measurevar = c("He_remain"),
groupvars = c("Genetic_Diversity"),
na.rm=TRUE)
## Genetic_Diversity N He_remain sd se ci
## 1 High 27 0.9918493 0.001771315 0.0003408897 0.0007007089
## 2 Medium 23 0.6743040 0.006431259 0.0013410101 0.0027810847
## 3 Low 34 0.5404225 0.012690807 0.0021764555 0.0044280320
#Calcul for end:
Rmisc::summarySE(data[data$Generation_Eggs==2&data$Extinction_finalstatus!="yes",],
measurevar = c("He_end"),
groupvars = c("Genetic_Diversity"),
na.rm=TRUE)
## Genetic_Diversity N He_end sd se ci
## 1 High 27 0.9663114 0.01931641 0.003717444 0.007641317
## 2 Medium 18 0.6378048 0.03493729 0.008234799 0.017373906
## 3 Low 26 0.5090656 0.03443416 0.006753094 0.013908257
mfull <- lm(He_end ~ Genetic_Diversity, data=data[data$Generation_Eggs==2&data$Extinction_finalstatus!="yes",])
mless <- lm(He_end ~ 1, data=data[data$Generation_Eggs==2&data$Extinction_finalstatus!="yes",])
anova(mfull,mless) #Keep effect
## Analysis of Variance Table
##
## Model 1: He_end ~ Genetic_Diversity
## Model 2: He_end ~ 1
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 68 0.06009
## 2 70 2.97522 -2 -2.9151 1649.3 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
############
###### Posthoc
############
emmeans::emmeans(mfull, list(pairwise ~ Genetic_Diversity), adjust = "tukey")
## $`emmeans of Genetic_Diversity`
## Genetic_Diversity emmean SE df lower.CL upper.CL
## High 0.966 0.00572 68 0.952 0.980
## Medium 0.638 0.00701 68 0.621 0.655
## Low 0.509 0.00583 68 0.495 0.523
##
## Confidence level used: 0.95
## Conf-level adjustment: sidak method for 3 estimates
##
## $`pairwise differences of Genetic_Diversity`
## contrast estimate SE df t.ratio p.value
## High - Medium 0.329 0.00905 68 36.316 <.0001
## High - Low 0.457 0.00817 68 55.978 <.0001
## Medium - Low 0.129 0.00912 68 14.124 <.0001
##
## P value adjustment: tukey method for comparing a family of 3 estimates
Growth rate and
He
#Best model with genetic diversity
mod0 <- lme4::lmer(Lambda ~ Genetic_Diversity + Block + (1|Population),
data=data_phenotyping)
mod0 <- lme4::lmer(Lambda ~ Genetic_Diversity + Block + (1|Population),
data=data_phenotyping[!is.na(data_phenotyping$He_end),])
mod1 <- lme4::lmer(Lambda ~ He_end + Block + (1|Population),
data=data_phenotyping[!is.na(data_phenotyping$He_end),])
mod2 <- lme4::lmer(Lambda ~ Block + (1|Population),
data=data_phenotyping[!is.na(data_phenotyping$He_end),])
mod3 <- lme4::lmer(Lambda ~ log(He_end) + Block + (1|Population),
data=data_phenotyping[!is.na(data_phenotyping$He_end),])
mod4 <- lme4::lmer(Lambda ~ 1 + Block + (1|Population),
data=data_phenotyping[!is.na(data_phenotyping$He_end),])
mod5 <- lme4::lmer(Lambda ~ exp(He_end) + Block + (1|Population),
data=data_phenotyping[!is.na(data_phenotyping$He_end),])
MuMIn::model.sel(mod0, mod1,mod2,mod3,mod4,mod5)
## Model selection table
## (Int) Blc Gnt_Dvr He_end log(He_end) exp(He_end) family df
## mod1 0.8154 + 1.766 gaussian(identity) 6
## mod5 0.3445 + 0.8311 gaussian(identity) 6
## mod3 2.5470 + 1.259 gaussian(identity) 6
## mod0 2.5700 + + gaussian(identity) 7
## mod2 2.0770 + gaussian(identity) 5
## mod4 2.0770 + gaussian(identity) 5
## logLik AICc delta weight
## mod1 -257.506 527.5 0.00 0.408
## mod5 -258.097 528.7 1.18 0.226
## mod3 -258.156 528.8 1.30 0.213
## mod0 -257.449 529.5 2.05 0.147
## mod2 -263.551 537.4 9.95 0.003
## mod4 -263.551 537.4 9.95 0.003
## Models ranked by AICc(x)
## Random terms (all models):
## '1 | Population'
#Makes sense: best model log He
x <- seq(1:100)
y <- seq(1001:1100)
plot(log(x),y)

#############################################################
################## Analysis ###################
#############################################################
mod3 <- lme4::lmer(Lambda ~ log(He_end) + Block + (1|Population),
data=data_phenotyping[!is.na(data_phenotyping$He_end),])
mod4 <- lme4::lmer(Lambda ~ 1 + Block + (1|Population),
data=data_phenotyping[!is.na(data_phenotyping$He_end),])
anova(mod3,mod4,test="Chisq") # difference
## Data: data_phenotyping[!is.na(data_phenotyping$He_end), ]
## Models:
## mod4: Lambda ~ 1 + Block + (1 | Population)
## mod3: Lambda ~ log(He_end) + Block + (1 | Population)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## mod4 5 532.53 548.66 -261.26 522.53
## mod3 6 522.65 542.01 -255.33 510.65 11.878 1 0.000568 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mod3)
## Linear mixed model fit by REML ['lmerMod']
## Formula: Lambda ~ log(He_end) + Block + (1 | Population)
## Data: data_phenotyping[!is.na(data_phenotyping$He_end), ]
##
## REML criterion at convergence: 516.3
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.3851 -0.6642 -0.0835 0.5336 3.4375
##
## Random effects:
## Groups Name Variance Std.Dev.
## Population (Intercept) 0.2567 0.5067
## Residual 0.7473 0.8644
## Number of obs: 186, groups: Population, 57
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 2.547160 0.201530 12.639
## log(He_end) 1.259386 0.351126 3.587
## BlockBlock4 0.229875 0.219317 1.048
## BlockBlock5 0.004275 0.254183 0.017
##
## Correlation of Fixed Effects:
## (Intr) lg(H_) BlckB4
## log(He_end) 0.655
## BlockBlock4 -0.625 -0.154
## BlockBlock5 -0.581 -0.197 0.446
#############################################################
################## Predict ###################
#############################################################
data_predict_lambda <- data.frame(He_end =
seq(min(data_phenotyping[!is.na(data_phenotyping$He_end),]$He_end),
max(data_phenotyping[!is.na(data_phenotyping$He_end),]$He_end),
0.01),
Block = "Block4")
data_predict_lambda$lambda_predict <- predict(mod3,
type = "response",
re.form = NA,
newdata = data_predict_lambda)
PLOT_He_expect <- PLOT_He_Final + geom_line(data = data_predict_lambda,
aes(x = He_end, y = lambda_predict),
linetype = "longdash", col = "grey40", size = 1.25)
#
# #
# cowplot::save_plot(here::here("figures","Fitness_He_final.pdf"), PLOT_He_expect,
# base_height = 12/cm(1), base_width = 18/cm(1), dpi = 610)
#
Adults G6
m0 <- lme4::glmer(Adults ~ Genetic_Diversity + (1|Population) + (1|ID_Rep:Population),
family = "poisson", data = data_phenotyping)
summary(m0)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: poisson ( log )
## Formula:
## Adults ~ Genetic_Diversity + (1 | Population) + (1 | ID_Rep:Population)
## Data: data_phenotyping
##
## AIC BIC logLik deviance df.resid
## 1818.1 1834.3 -904.1 1808.1 181
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.23572 -0.14532 0.02672 0.14825 0.41394
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID_Rep:Population (Intercept) 0.1739 0.4170
## Population (Intercept) 0.1085 0.3294
## Number of obs: 186, groups: ID_Rep:Population, 186; Population, 57
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.2943 0.0812 52.884 < 2e-16 ***
## Genetic_DiversityMedium -0.5132 0.1438 -3.569 0.000358 ***
## Genetic_DiversityLow -0.3047 0.1295 -2.352 0.018660 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Gnt_DM
## Gntc_DvrstM -0.563
## Gntc_DvrstL -0.625 0.356
# Equivalent to:
# m0 <- lme4::glmer(Adults ~ Genetic_Diversity + (1|Population/ID_Rep),
# family = "poisson", data = data_5week)
#dispersion_lme4::glmer(m0) #dispersion ok
#Note: (1|School) + (1|Class:School) is equivalent to (1|School/Class)
m0 <- lme4::glmer(Adults ~ Genetic_Diversity + (1|Population) + (1|ID_Rep:Population),
family = "poisson", data = data_phenotyping)
m1 <- lme4::glmer(Adults ~ 1 + (1|Population) + (1|ID_Rep:Population),
family = "poisson", data = data_phenotyping)
anova(m0,m1,test="Chisq") # difference
## Data: data_phenotyping
## Models:
## m1: Adults ~ 1 + (1 | Population) + (1 | ID_Rep:Population)
## m0: Adults ~ Genetic_Diversity + (1 | Population) + (1 | ID_Rep:Population)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## m1 3 1826.3 1836.0 -910.15 1820.3
## m0 5 1818.1 1834.3 -904.07 1808.1 12.164 2 0.002284 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(m0)
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: poisson ( log )
## Formula:
## Adults ~ Genetic_Diversity + (1 | Population) + (1 | ID_Rep:Population)
## Data: data_phenotyping
##
## AIC BIC logLik deviance df.resid
## 1818.1 1834.3 -904.1 1808.1 181
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.23572 -0.14532 0.02672 0.14825 0.41394
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID_Rep:Population (Intercept) 0.1739 0.4170
## Population (Intercept) 0.1085 0.3294
## Number of obs: 186, groups: ID_Rep:Population, 186; Population, 57
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.2943 0.0812 52.884 < 2e-16 ***
## Genetic_DiversityMedium -0.5132 0.1438 -3.569 0.000358 ***
## Genetic_DiversityLow -0.3047 0.1295 -2.352 0.018660 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Gnt_DM
## Gntc_DvrstM -0.563
## Gntc_DvrstL -0.625 0.356
############
###### Posthoc
############
emmeans::emmeans(m0, list(pairwise ~ Genetic_Diversity), adjust = "tukey")
## $`emmeans of Genetic_Diversity`
## Genetic_Diversity emmean SE df asymp.LCL asymp.UCL
## High 4.29 0.0812 Inf 4.10 4.49
## Medium 3.78 0.1188 Inf 3.50 4.06
## Low 3.99 0.1011 Inf 3.75 4.23
##
## Results are given on the log (not the response) scale.
## Confidence level used: 0.95
## Conf-level adjustment: sidak method for 3 estimates
##
## $`pairwise differences of Genetic_Diversity`
## contrast estimate SE df z.ratio p.value
## High - Medium 0.513 0.144 Inf 3.569 0.0010
## High - Low 0.305 0.130 Inf 2.352 0.0489
## Medium - Low -0.208 0.156 Inf -1.340 0.3728
##
## Results are given on the log (not the response) scale.
## P value adjustment: tukey method for comparing a family of 3 estimates
#test double nested
m0 <- lme4::glmer(Adults ~ Genetic_Diversity + (1|Genetic_Diversity/Population/ID_Rep),
family = "poisson", data = data_phenotyping)
m1 <- lme4::glmer(Adults ~ 1 + (1|Genetic_Diversity/Population/ID_Rep),
family = "poisson", data = data_phenotyping)
anova(m0,m1,test="Chisq")
## Data: data_phenotyping
## Models:
## m1: Adults ~ 1 + (1 | Genetic_Diversity/Population/ID_Rep)
## m0: Adults ~ Genetic_Diversity + (1 | Genetic_Diversity/Population/ID_Rep)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## m1 4 1823.6 1836.5 -907.81 1815.6
## m0 6 1820.1 1839.5 -904.07 1808.1 7.4783 2 0.02377 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m0 <- lme4::glmer(Adults ~ Genetic_Diversity + (1|Genetic_Diversity/ID_Rep),
family = "poisson", data = data_phenotyping)
m1 <- lme4::glmer(Adults ~ 1 + (1|Genetic_Diversity/ID_Rep),
family = "poisson", data = data_phenotyping)
anova(m0,m1,test="Chisq")
## Data: data_phenotyping
## Models:
## m1: Adults ~ 1 + (1 | Genetic_Diversity/ID_Rep)
## m0: Adults ~ Genetic_Diversity + (1 | Genetic_Diversity/ID_Rep)
## npar AIC BIC logLik deviance Chisq Df Pr(>Chisq)
## m1 3 1844.6 1854.3 -919.30 1838.6
## m0 5 1838.5 1854.6 -914.26 1828.5 10.086 2 0.006455 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Adults G2
m0 <- glm(Nb_adults ~ Genetic_Diversity + Block, family = "poisson", data = data[data$Generation_Eggs==2,])
summary(m0)
##
## Call:
## glm(formula = Nb_adults ~ Genetic_Diversity + Block, family = "poisson",
## data = data[data$Generation_Eggs == 2, ])
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -18.7057 -2.7621 0.2126 3.3983 11.4454
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 5.73890 0.01497 383.312 < 2e-16 ***
## Genetic_DiversityMedium -0.19408 0.01628 -11.920 < 2e-16 ***
## Genetic_DiversityLow -0.19278 0.01460 -13.205 < 2e-16 ***
## BlockBlock4 0.10767 0.01579 6.817 9.3e-12 ***
## BlockBlock5 0.17743 0.01600 11.088 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 2379.6 on 83 degrees of freedom
## Residual deviance: 2027.9 on 79 degrees of freedom
## AIC: 2667.2
##
## Number of Fisher Scoring iterations: 4
m1<- glm(Nb_adults ~ Block, family = "poisson", data = data[data$Generation_Eggs==2,])
anova(m0,m1,test="Chisq") # difference
## Analysis of Deviance Table
##
## Model 1: Nb_adults ~ Genetic_Diversity + Block
## Model 2: Nb_adults ~ Block
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 79 2027.9
## 2 81 2241.4 -2 -213.52 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
############
###### Posthoc
############
emmeans::emmeans(m0, list(pairwise ~ Genetic_Diversity), adjust = "tukey")
## $`emmeans of Genetic_Diversity`
## Genetic_Diversity emmean SE df asymp.LCL asymp.UCL
## High 5.834 0.01051 Inf 5.809 5.859
## Medium 5.640 0.01243 Inf 5.610 5.670
## Low 5.641 0.01022 Inf 5.617 5.666
##
## Results are averaged over the levels of: Block
## Results are given on the log (not the response) scale.
## Confidence level used: 0.95
## Conf-level adjustment: sidak method for 3 estimates
##
## $`pairwise differences of Genetic_Diversity`
## contrast estimate SE df z.ratio p.value
## High - Medium 0.1941 0.0163 Inf 11.920 <.0001
## High - Low 0.1928 0.0146 Inf 13.205 <.0001
## Medium - Low -0.0013 0.0161 Inf -0.081 0.9964
##
## Results are averaged over the levels of: Block
## Results are given on the log (not the response) scale.
## P value adjustment: tukey method for comparing a family of 3 estimates